diff --git a/rtdata/images/Dark/actions/profile-filled.png b/rtdata/images/Dark/actions/profile-filled.png
new file mode 100644
index 000000000..8e39de5f2
Binary files /dev/null and b/rtdata/images/Dark/actions/profile-filled.png differ
diff --git a/rtdata/images/Dark/actions/profile-partial.png b/rtdata/images/Dark/actions/profile-partial.png
new file mode 100644
index 000000000..70c77fdff
Binary files /dev/null and b/rtdata/images/Dark/actions/profile-partial.png differ
diff --git a/rtdata/images/Light/actions/profile-filled.png b/rtdata/images/Light/actions/profile-filled.png
new file mode 100644
index 000000000..7e5ae44bf
Binary files /dev/null and b/rtdata/images/Light/actions/profile-filled.png differ
diff --git a/rtdata/images/Light/actions/profile-partial.png b/rtdata/images/Light/actions/profile-partial.png
new file mode 100644
index 000000000..9bb666ae3
Binary files /dev/null and b/rtdata/images/Light/actions/profile-partial.png differ
diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index fb9d06096..64e1c008f 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -88,7 +88,7 @@ FILEBROWSER_ARRANGEMENTHINT;Permuter entre l'alignement vertical/horizontal des
FILEBROWSER_AUTODARKFRAME;Soustraction automatique de Trame Noire
FILEBROWSER_AUTOFLATFIELD;Champ Uniforme auto
FILEBROWSER_BROWSEPATHBUTTONHINT;Cliquez pour parcourir le chemin saisi
-FILEBROWSER_BROWSEPATHHINT;Saisissez le chemin à parcourir (Ctrl-o place le focus,Ctrl-Entrée pour naviguer dans le Navigateur de Fichier)
+FILEBROWSER_BROWSEPATHHINT;Saisissez le chemin à parcourir\nCtrl-O pour placer le focus sur le champ de saisie.\nEntrée / Ctrl-Entrée pour y naviguer;\nEsc pour effacer les modifications.\nShift-Esc pour enlever le focus.\n\n\nRaccourcis pour les chemins:\n ~ - le dossier utilisateur\n ! - le dossier Images de l'utilisateur
FILEBROWSER_CACHECLEARFROMFULL;Supprimer du cache (complet)
FILEBROWSER_CACHECLEARFROMPARTIAL;Supprimer du cache (partiel)
FILEBROWSER_CACHE;Cache
@@ -149,7 +149,7 @@ FILEBROWSER_POPUPUNTRASH;Retirer de la corbeille
FILEBROWSER_PROCESSINGSETTINGSHINT;Règle le format de fichier et le dossier de sortie
FILEBROWSER_PROCESSINGSETTINGS;Réglages
FILEBROWSER_QUERYBUTTONHINT;Effacer la recherche
-FILEBROWSER_QUERYHINT;Taper la partie du nom du fichier à chercher. \nCtrl-f Place le curseur dans le champ de saisie;\nEntrée pour lancer la recherche
+FILEBROWSER_QUERYHINT;Taper la partie du nom du fichier à chercher ou une liste spéarée par des virgules.\nEx: 1001.1004.1199\n\nCtrl-F pour placer le curseur dans le champ de saisie.\nEntrée pour lancer la recherche\nEsc pour effacer.\nShift-Esc pour enlever le focus.
FILEBROWSER_QUERYLABEL;Chercher:
FILEBROWSER_RENAMEDLGLABEL;Renommage du fichier
FILEBROWSER_RENAMEDLGMSG;Renommer le fichier "%1" en:
@@ -163,7 +163,7 @@ FILEBROWSER_SHOWCOLORLABEL5HINT;Afficher les images avec un label Pourpre Alt
FILEBROWSER_SHOWDIRHINT;Voir toutes les images du dossier D
FILEBROWSER_SHOWEDITEDHINT;Afficher les images éditées 7
FILEBROWSER_SHOWEDITEDNOTHINT;Afficher les images non éditées 6
-FILEBROWSER_SHOWEXIFINFO;Montrer les infos EXIF i
+FILEBROWSER_SHOWEXIFINFO;Montrer les infos EXIF.\nRaccourcis: i\n\nRaccourcis dans le mode Éditeur unique: Alt-i
FILEBROWSER_SHOWQUEUEHINT;Voir le contenu de la file de traitement
FILEBROWSER_SHOWRANK1HINT;Voir les images 1 étoile 1
FILEBROWSER_SHOWRANK2HINT;Voir les images 2 étoiles 2
@@ -182,8 +182,8 @@ FILEBROWSER_STOPPROCESSING;Arrêter le traitement
FILEBROWSER_THUMBSIZE;Taille vign.
FILEBROWSER_TOOLTIP_STOPPROCESSING;Démarrer automatiquement le traitement à l'arrivée d'une nouvelle tâche
FILEBROWSER_USETEMPLATE;Utiliser le modèle:
-FILEBROWSER_ZOOMINHINT;Augmenter la taille des vignettes +
-FILEBROWSER_ZOOMOUTHINT;Diminuer la taille des vignettes -
+FILEBROWSER_ZOOMINHINT;Augmenter la taille des vignettes.\nRaccourcis: +\n\nRaccourcis dans le mode Éditeur unique: Alt +
+FILEBROWSER_ZOOMOUTHINT;Diminuer la taille des vignettes.\nRaccourcis: -\n\nRaccourcis dans le mode Éditeur unique: Alt -
GENERAL_ABOUT;À propos
GENERAL_AFTER;Après
GENERAL_AUTO;Automatique
@@ -430,6 +430,7 @@ HISTORY_MSG_200;CAM02 - Compression tonale avec Q
HISTORY_MSG_201;Réd. de bruit - Delta chrom. rouge
HISTORY_MSG_202;Réd. de bruit - Delta chrom. bleu
HISTORY_MSG_203;Réd. de bruit - Méthode
+HISTORY_MSG_204;Niveau d'amélioration LMMSE
HISTORY_NEWSNAPSHOTAS;Sous...
HISTORY_NEWSNAPSHOT;Ajouter
HISTORY_NEWSNAPSHOT_TOOLTIP;Raccourcis: Alt-s
@@ -496,6 +497,9 @@ IPTCPANEL_TRANSREFERENCEHINT;Un code représentant le lieux de la transmission i
IPTCPANEL_TRANSREFERENCE;Réf. transmission
MAIN_BUTTON_EXIT;Sortie
MAIN_BUTTON_FULLSCREEN;Plein écran
+MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigue à l'image Suivante relativement à l'image ouverte dans l'Éditeur\nRaccourcis: Shift-F4\n\nPour naviguer à l'image Suivante relativement à la vignette sélectionnée dans le Navigateur de fichiers\nRaccourcis: F4
+MAIN_BUTTON_NAVPREV_TOOLTIP;Navigue à l'image Précédante relativement à l'image ouverte dans l'Éditeur\nRaccourcis: Shift-F3\n\nPour naviguer à l'image Précédante relativement à la vignette sélectionnée dans le Navigateur de fichiers\nRaccourcis: F3
+MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronise le Navigateur de fichiers avec l'Éditeur pour révéler la vignette de l'image actuellement ouverte, et efface les filtres dans le Navigateur de fichiers\nRaccourcis: x\n\nComme ci-dessus, mais sans effacer les filtres dans le Navigateur de fichiers\nRaccourcis: y\n(Notez que la vignette ne sera pas visible si elle a été filtrée).
MAIN_BUTTON_PREFERENCES;Préférences
MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Ajouter l'image courante à la file de traitement Ctrl+Q
MAIN_BUTTON_QUEUE;Envoyer dans la file
@@ -654,6 +658,7 @@ PARTIALPASTE_RAWGROUP;Réglages RAW
PARTIALPASTE_RAW_ALLENHANCE;Applique la réduction de bruit/artefact post-dématriçage
PARTIALPASTE_RAW_DCBENHANCE;Appliquer la phase d'amélioration de DCB
PARTIALPASTE_RAW_DCBITERATIONS;Nombre d'itération de DCB
+PARTIALPASTE_RAW_LMMSEITERATIONS;Niveau d'amélioration LMMSE
PARTIALPASTE_RAW_DMETHOD;Algorithme de dématriçage
PARTIALPASTE_RAW_FALSECOLOR;Nbr d'itération des fausses couleurs
PARTIALPASTE_RESIZE;Redimentionnement
@@ -672,6 +677,10 @@ PREFERENCES_APPLNEXTSTARTUP;appliqué au prochain lancement
PREFERENCES_AUTOMONPROFILE;Utiliser automatiquement le profil de l'écran principal
PREFERENCES_BATCH_PROCESSING;Traitement par lot
PREFERENCES_BEHAVIOR;Comportement
+PREFERENCES_BEHADDALL;Tout à 'Ajoute'
+PREFERENCES_BEHADDALLHINT;Règle tous les paramètres sur le mode Ajoute.\nLa modification des paramètres dans le panneau d'édition en par lot sera des deltas par-rapport aux valeurs existantes
+PREFERENCES_BEHSETALL;Tout à 'Remplace'
+PREFERENCES_BEHSETALLHINT;Règle tous les paramètres sur le mode Remplace.\nLa modification des paramètres dans le panneau d'édition en par lot sera absolue, les valeurs réelles seront affichées
PREFERENCES_BLACKBODY;Tungstène
PREFERENCES_BLINKCLIPPED;Faire clignoter les zones hors domaine
PREFERENCES_CACHECLEARALL;Tout nettoyer
@@ -830,6 +839,7 @@ PROFILEPANEL_FILEDLGFILTERPP;Profils de post-traitement
PROFILEPANEL_LABEL;Profils de post-traitement
PROFILEPANEL_LOADDLGLABEL;Charger les paramètres de post-traitement...
PROFILEPANEL_LOADPPASTE;Paramètres à charger
+PROFILEPANEL_MODE_TIP;Bouton pressé: les profils partiels seront convertis en profils complets; les valeurs manquantes seront remplacées par les valeurs internes par défaut\n\nBouton relevé: les profils seront appliqués tel quel, altérant seulement les paramètres qu'ils contiennent.
PROFILEPANEL_PASTEPPASTE;Paramètres à coller
PROFILEPANEL_PCUSTOM;Personnel
PROFILEPANEL_PFILE;Depuis le fichier
@@ -911,8 +921,8 @@ TP_CHMIXER_RED;Rouge
TP_CHROMATABERR_LABEL;Aberration Chromatique
TP_COARSETRAF_DEGREE;degré:
TP_COARSETRAF_TOOLTIP_HFLIP;Symétriser / axe vertical
-TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotation vers la gauche
-TP_COARSETRAF_TOOLTIP_ROTRIGHT;Rotation vers la droite
+TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotation vers la gauche\nRaccourcis: [\n\nRaccourcis en mode Éditeur unique: Alt-[
+TP_COARSETRAF_TOOLTIP_ROTRIGHT;Rotation vers la droite\nRaccourcis: ]\n\nRaccourcis en mode Éditeur unique: Alt-]
TP_COARSETRAF_TOOLTIP_VFLIP;Symétriser / axe horizontal
TP_COLORAPP_ADAPTSCENE;Luminosité d'adaptation (cd/m2)
TP_COLORAPP_ADAPTSCENE_TOOLTIP;Luminance absolue de l'environnement de la scène\n(souvent 2000cd/m2)
@@ -1192,6 +1202,8 @@ TP_RAW_ALLENHANCE;Réduction de bruit/artefact post-dématriçage
TP_RAW_DCBENHANCE;Appliquer la phase d'amélioration de DCB
TP_RAW_DCBITERATIONS;Nombre d'itération de DCB
TP_RAW_DMETHOD;Méthode
+TP_RAW_LMMSEITERATIONS;Niveau d'amélioration LMMSE
+TP_RAW_LMMSE_TOOLTIP;Ajoute gamma (niveau 1) - ajoute médian (niveau 2,3,4), puis ajoute un affinage (niveau 5,6) pour réduire les artéfacts et améliorer le rapport signal/bruit
TP_RAW_DMETHOD_PROGRESSBAR;Dématriçage %1...
TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Affinage du dématriçage...
TP_RAW_DMETHOD_TOOLTIP;Note: IGV et LMMSE sont dédiés aux images à haut ISO
@@ -1331,7 +1343,7 @@ ZOOMBAR_SCALE;Échelle
ZOOMBAR_SMALL;Petit
ZOOMPANEL_100;(100%)
ZOOMPANEL_NEWCROPWINDOW;Ouvrir une (nouvelle) vue détaillée
-ZOOMPANEL_ZOOM100;Zoom à 100% 1
+ZOOMPANEL_ZOOM100;Zoom à 100%\nRaccourcis: z
ZOOMPANEL_ZOOMFITSCREEN;Ajuster à la fenêtre F
ZOOMPANEL_ZOOMIN;Zoom +
ZOOMPANEL_ZOOMOUT;Zoom -
@@ -1342,7 +1354,7 @@ ZOOMPANEL_ZOOMOUT;Zoom -
! Untranslated keys follow; remove the ! prefix after an entry is translated.
!!!!!!!!!!!!!!!!!!!!!!!!!
-!TP_COLORAPP_SHARPCIE;Sharpening, Contrast by Detail Levels, Microcontrast & Defringe with Q/C
-!TP_COLORAPP_SHARPCIE_TOOLTIP;Sharpening, Contrast by Detail Levels, Microcontrast & Defringe will use CIECAM02 if enabled.
-!TP_RGBCURVES_LUMAMODE;Luminosity Mode
-!TP_RGBCURVES_LUMAMODE_TOOLTIP;Luminosity Mode allows to vary the contribution of R, G an B channels to the Luminosity of the image, without altering image color.
+TP_COLORAPP_SHARPCIE;Netteté, Contraste par niveau de détails, Microcontraste & Aberration chromatique avec Q/C
+TP_COLORAPP_SHARPCIE_TOOLTIP;Netteté, Contraste par niveau de détails, Microcontraste & Aberration chromatique utiliseront CIECAM02 si activé.
+TP_RGBCURVES_LUMAMODE;Mode Lominosité
+TP_RGBCURVES_LUMAMODE_TOOLTIP;Mode Lominosité permet de faire varier la contribution des canaux R, V et B à la luminosité de l'image, sans altérer les couleurs de l'image.
diff --git a/rtdata/languages/default b/rtdata/languages/default
index f5843680c..c6d74cc59 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -835,6 +835,7 @@ PROFILEPANEL_FILEDLGFILTERPP;Processing profiles
PROFILEPANEL_LABEL;Processing Profiles
PROFILEPANEL_LOADDLGLABEL;Load Processing Parameters...
PROFILEPANEL_LOADPPASTE;Parameters to load
+PROFILEPANEL_MODE_TIP;Button pressed: partial profiles will be converted to full profiles; the missing values will be replaced with hard-coded defaults.\n\nButton released: profiles will be applied as they are, altering only those values which they contain.
PROFILEPANEL_PASTEPPASTE;Parameters to paste
PROFILEPANEL_PCUSTOM;Custom
PROFILEPANEL_PFILE;From file
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index e413e2ffa..4463e6866 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -1740,7 +1740,7 @@ void PartialProfile::clearGeneral () {
}
}
-void PartialProfile::applyTo(ProcParams *destParams) const {
+const void PartialProfile::applyTo(ProcParams *destParams) const {
if (destParams && pparams && pedited) {
pedited->combine(*destParams, *pparams, true);
}
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index d4cb47ac7..5d5f9ec37 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -853,7 +853,7 @@ class PartialProfile {
void clearGeneral ();
int load (Glib::ustring fName);
void set (bool v);
- void applyTo (ProcParams *destParams) const ;
+ const void applyTo (ProcParams *destParams) const ;
};
}
diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc
index 614b38ce7..38079d411 100644
--- a/rtgui/editorpanel.cc
+++ b/rtgui/editorpanel.cc
@@ -398,6 +398,8 @@ void EditorPanel::rightPaneButtonReleased(GdkEventButton *event) {
}
void EditorPanel::writeOptions() {
+ if (profilep)
+ profilep->writeOptions();
if (tpc)
tpc->writeOptions();
}
diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc
index 997c694af..2b66ecba3 100644
--- a/rtgui/filebrowser.cc
+++ b/rtgui/filebrowser.cc
@@ -877,7 +877,7 @@ bool FileBrowser::keyPressed (GdkEventKey* event) {
void FileBrowser::applyMenuItemActivated (Glib::ustring ppname) {
- rtengine::procparams::PartialProfile* partProfile = profileStore.getProfile (ppname);
+ const rtengine::procparams::PartialProfile* partProfile = profileStore.getProfile (ppname);
if (partProfile->pparams && !selected.empty()) {
for (size_t i=0; i(selected[i]))->thumbnail->setProcParams (*partProfile->pparams, partProfile->pedited, FILEBROWSER);
@@ -890,7 +890,7 @@ void FileBrowser::applyPartialMenuItemActivated (Glib::ustring ppname) {
if (!tbl || selected.empty())
return;
- rtengine::procparams::PartialProfile* srcProfiles = profileStore.getProfile (ppname);
+ const rtengine::procparams::PartialProfile* srcProfiles = profileStore.getProfile (ppname);
if (srcProfiles->pparams) {
if (partialPasteDlg.run()==Gtk::RESPONSE_OK) {
diff --git a/rtgui/options.cc b/rtgui/options.cc
index 0d28227a4..c6cf653fa 100644
--- a/rtgui/options.cc
+++ b/rtgui/options.cc
@@ -307,6 +307,8 @@ void Options::setDefaults () {
rgbDenoiseThreadLimit = 0;
+ filledProfile = false;
+
showProfileSelector = true;
FileBrowserToolbarSingleRow = false;
hideTPVScrollbar = false;
@@ -571,6 +573,7 @@ if (keyFile.has_group ("Profiles")) {
if (keyFile.has_key ("Profiles", "LoadSaveProfilePath")) loadSaveProfilePath = keyFile.get_string ("Profiles", "LoadSaveProfilePath");
if (keyFile.has_key ("Profiles", "RawDefault")) defProfRaw = keyFile.get_string ("Profiles", "RawDefault");
if (keyFile.has_key ("Profiles", "ImgDefault")) defProfImg = keyFile.get_string ("Profiles", "ImgDefault");
+ if (keyFile.has_key ("Profiles", "FilledProfile")) filledProfile = keyFile.get_boolean ("Profiles", "FilledProfile");
if (keyFile.has_key ("Profiles", "SaveParamsWithFile")) saveParamsFile = keyFile.get_boolean ("Profiles", "SaveParamsWithFile");
if (keyFile.has_key ("Profiles", "SaveParamsToCache")) saveParamsCache = keyFile.get_boolean ("Profiles", "SaveParamsToCache");
if (keyFile.has_key ("Profiles", "LoadParamsFromLocation")) paramsLoadLocation = (PPLoadLocation)keyFile.get_integer ("Profiles", "LoadParamsFromLocation");
@@ -869,6 +872,7 @@ int Options::saveToFile (Glib::ustring fname) {
keyFile.set_string ("Profiles", "LoadSaveProfilePath", loadSaveProfilePath);
keyFile.set_string ("Profiles", "RawDefault", defProfRaw);
keyFile.set_string ("Profiles", "ImgDefault", defProfImg);
+ keyFile.set_boolean ("Profiles", "FilledProfile", filledProfile);
keyFile.set_boolean ("Profiles", "SaveParamsWithFile", saveParamsFile);
keyFile.set_boolean ("Profiles", "SaveParamsToCache", saveParamsCache);
keyFile.set_integer ("Profiles", "LoadParamsFromLocation", paramsLoadLocation);
diff --git a/rtgui/options.h b/rtgui/options.h
index 2d0da00f8..57f32778e 100644
--- a/rtgui/options.h
+++ b/rtgui/options.h
@@ -108,8 +108,8 @@ class Options {
bool windowMaximized;
int dirBrowserWidth;
int dirBrowserHeight;
- int preferencesWidth;
- int preferencesHeight;
+ int preferencesWidth;
+ int preferencesHeight;
int lastScale;
int panAccelFactor;
int lastCropSize;
@@ -151,7 +151,7 @@ class Options {
Glib::ustring psDir;
Glib::ustring customEditorProg;
Glib::ustring customProfileBuilder;
- int editorToSendTo;
+ int editorToSendTo;
int maxThumbnailHeight;
std::size_t maxCacheEntries;
ThFileType thumbnailFormat;
@@ -198,6 +198,8 @@ class Options {
// Performance options
int rgbDenoiseThreadLimit; // maximum number of threads for the denoising tool ; 0 = use the maximum available
+ bool filledProfile; // Used as reminder for the ProfilePanel "mode"
+
bool menuGroupRank;
bool menuGroupLabel;
bool menuGroupFileOperations;
diff --git a/rtgui/profilepanel.cc b/rtgui/profilepanel.cc
index bec6349bd..94f2d6576 100644
--- a/rtgui/profilepanel.cc
+++ b/rtgui/profilepanel.cc
@@ -27,8 +27,6 @@
using namespace rtengine;
using namespace rtengine::procparams;
-extern Glib::ustring argv0;
-
PartialPasteDlg* ProfilePanel::partialProfileDlg;
@@ -43,7 +41,15 @@ void ProfilePanel::cleanup () {
ProfilePanel::ProfilePanel (bool readOnly) : lastFilename(""), imagePath("") {
tpc = NULL;
-
+
+ profileFillModeOnImage = new RTImage("profile-filled.png");
+ profileFillModeOffImage = new RTImage("profile-partial.png");
+ fillMode = Gtk::manage (new Gtk::ToggleButton());
+ fillMode->set_active(options.filledProfile);
+ fillMode->add( options.filledProfile ? *profileFillModeOnImage : *profileFillModeOffImage );
+ fillMode->signal_toggled().connect ( sigc::mem_fun(*this, &ProfilePanel::profileFillModeToggled) );
+ fillMode->set_tooltip_text(M("PROFILEPANEL_MODE_TIP"));
+
profiles = Gtk::manage (new MyComboBoxText ());
Gtk::HBox* hbox = Gtk::manage (new Gtk::HBox ());
hbox->show ();
@@ -60,6 +66,7 @@ ProfilePanel::ProfilePanel (bool readOnly) : lastFilename(""), imagePath("") {
paste = Gtk::manage (new Gtk::Button ());
paste->add (*Gtk::manage (new RTImage ("edit-paste.png")));
+ hbox->pack_start (*fillMode, Gtk::PACK_SHRINK, 1);
hbox->pack_start (*profiles);
hbox->pack_start (*load, Gtk::PACK_SHRINK, 1);
if (!readOnly) hbox->pack_start (*save, Gtk::PACK_SHRINK, 1);
@@ -93,6 +100,8 @@ ProfilePanel::~ProfilePanel () {
if (custom) { custom->deleteInstance(); delete custom; }
if (lastsaved) { lastsaved->deleteInstance(); delete lastsaved; }
+ delete profileFillModeOnImage;
+ delete profileFillModeOffImage;
}
void ProfilePanel::refreshProfileList () {
@@ -166,7 +175,7 @@ void ProfilePanel::save_clicked (GdkEventButton* event) {
lastFilename = Glib::path_get_basename (fname);
- PartialProfile* toSave = NULL;
+ const PartialProfile* toSave;
if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")")
toSave = custom;
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTSAVED") + ")")
@@ -221,7 +230,7 @@ void ProfilePanel::copy_clicked (GdkEventButton* event) {
if (event->button != 1)
return;
- PartialProfile* toSave = NULL;
+ const PartialProfile* toSave;
if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")")
toSave = custom;
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTSAVED") + ")")
@@ -379,7 +388,7 @@ void ProfilePanel::paste_clicked (GdkEventButton* event) {
return;
}
-void ProfilePanel::changeTo (PartialProfile* newpp, Glib::ustring profname) {
+void ProfilePanel::changeTo (const PartialProfile* newpp, Glib::ustring profname) {
if (!newpp)
return;
@@ -398,9 +407,17 @@ void ProfilePanel::selection_changed () {
else if (profiles->get_active_text() == (entry = Glib::ustring("(") + M("PROFILEPANEL_PLASTSAVED") + ")"))
changeTo (lastsaved, entry);
else {
- PartialProfile* s = profileStore.getProfile (profiles->get_active_text());
- if (s)
- changeTo (s, profiles->get_active_text());
+ const PartialProfile* s = profileStore.getProfile (profiles->get_active_text());
+ if (s) {
+ if (fillMode->get_active() && s->pedited) {
+ ParamsEdited pe;
+ pe.set(true);
+ PartialProfile s2(s->pparams, &pe, false);
+ changeTo (&s2, profiles->get_active_text()+"+");
+ }
+ else
+ changeTo (s, profiles->get_active_text());
+ }
}
old = profiles->get_active_text ();
dontupdate = false;
@@ -453,7 +470,7 @@ void ProfilePanel::initProfile (const Glib::ustring& profname, ProcParams* lastS
}
Glib::ustring defline = profname;
- PartialProfile* defprofile = profileStore.getProfile (profname);
+ const PartialProfile* defprofile = profileStore.getProfile (profname);
if (lastsaved) {
defline = Glib::ustring("(") + M("PROFILEPANEL_PLASTSAVED") + ")";
@@ -475,18 +492,17 @@ void ProfilePanel::initProfile (const Glib::ustring& profname, ProcParams* lastS
tpc->profileChange (defprofile, EvPhotoLoaded, defline);
}
else {
- bool dels = false;
// select first valid profile
old = "";
profiles->set_active (0);
- PartialProfile* s = profileStore.getProfile (profiles->get_active_text());
+ const PartialProfile* s = profileStore.getProfile (profiles->get_active_text());
if (!s) {
changeconn.block (false);
- s = new PartialProfile (true);
- s->set(true);
- dels = true; // we've created a temporary PartialProfile, so we set a flag to destroy it
+ PartialProfile s2(true);
+ s2.pedited->set(true);
if (tpc)
- tpc->profileChange (s, EvPhotoLoaded, DEFPROFILE_INTERNAL);
+ tpc->profileChange (&s2, EvPhotoLoaded, DEFPROFILE_INTERNAL);
+ s2.deleteInstance();
}
else {
Glib::ustring cProfile = profiles->get_active_text();
@@ -494,11 +510,6 @@ void ProfilePanel::initProfile (const Glib::ustring& profname, ProcParams* lastS
if (tpc)
tpc->profileChange (s, EvPhotoLoaded, cProfile);
}
-
- if (dels) {
- s->deleteInstance();
- delete s;
- }
}
}
@@ -507,3 +518,18 @@ void ProfilePanel::setInitialFileName (const Glib::ustring& filename) {
imagePath = Glib::path_get_dirname(filename);
}
+void ProfilePanel::profileFillModeToggled() {
+ if (fillMode->get_active()) {
+ // The button is pressed, we'll use the profileFillModeOnImage
+ fillMode->set_image(*profileFillModeOnImage);
+ }
+ else {
+ // The button is released, we'll use the profileFillModeOffImage
+ fillMode->set_image(*profileFillModeOffImage);
+ }
+}
+
+void ProfilePanel::writeOptions() {
+ options.filledProfile = fillMode->get_active();
+}
+
diff --git a/rtgui/profilepanel.h b/rtgui/profilepanel.h
index dab365c18..647e0cfad 100644
--- a/rtgui/profilepanel.h
+++ b/rtgui/profilepanel.h
@@ -26,6 +26,7 @@
#include "profilechangelistener.h"
#include "partialpastedlg.h"
#include "guiutils.h"
+#include "rtimage.h"
class ProfilePanel : public Gtk::VBox, public PParamsChangeListener {
@@ -33,6 +34,11 @@ class ProfilePanel : public Gtk::VBox, public PParamsChangeListener {
Glib::ustring lastFilename;
Glib::ustring imagePath;
+ RTImage *profileFillModeOnImage;
+ RTImage *profileFillModeOffImage;
+ Gtk::ToggleButton* fillMode;
+
+ void profileFillModeToggled();
protected:
@@ -50,7 +56,7 @@ class ProfilePanel : public Gtk::VBox, public PParamsChangeListener {
bool dontupdate;
sigc::connection changeconn;
- void changeTo (rtengine::procparams::PartialProfile* newpp, Glib::ustring profname);
+ void changeTo (const rtengine::procparams::PartialProfile* newpp, Glib::ustring profname);
void refreshProfileList ();
public:
@@ -75,6 +81,7 @@ class ProfilePanel : public Gtk::VBox, public PParamsChangeListener {
void copy_clicked (GdkEventButton* event);
void paste_clicked (GdkEventButton* event);
void selection_changed ();
+ void writeOptions();
};
#endif
diff --git a/rtgui/profilestore.cc b/rtgui/profilestore.cc
index bbeba0460..7d8b5f8b1 100644
--- a/rtgui/profilestore.cc
+++ b/rtgui/profilestore.cc
@@ -143,7 +143,7 @@ void ProfileStore::parseDir (const Glib::ustring& pdir) {
}
}
-PartialProfile* ProfileStore::getProfile (const Glib::ustring& profname) {
+const PartialProfile* ProfileStore::getProfile (const Glib::ustring& profname) {
if (!init())
// I don't even know if this situation can occur
@@ -177,14 +177,14 @@ std::vector ProfileStore::getProfileNames () {
* If the profile doesn't already exist in the profile list,
* it will add it with default internal values, so this method never fails
*/
-ProcParams* ProfileStore::getDefaultProcParams (bool isRaw) {
+const ProcParams* ProfileStore::getDefaultProcParams (bool isRaw) {
if (!init())
// I don't even know if this situation can occur
return NULL;
//Note: the mutex is locked in getProfile, called below
- PartialProfile* pProf = getProfile (isRaw ? options.defProfRaw : options.defProfImg);
+ const PartialProfile* pProf = getProfile (isRaw ? options.defProfRaw : options.defProfImg);
// NOTE: pProf should not be NULL anymore, since init() should have created the default profiles already
return pProf->pparams;
}
@@ -194,14 +194,14 @@ ProcParams* ProfileStore::getDefaultProcParams (bool isRaw) {
* If it doesn't already exist in the profile list, it will add it with default internal values,
* so this method will never fails
*/
-PartialProfile* ProfileStore::getDefaultPartialProfile (bool isRaw) {
+const PartialProfile* ProfileStore::getDefaultPartialProfile (bool isRaw) {
if (!init())
// I don't even know if this situation can occur
return NULL;
//Note: the mutex is locked in getProfile, called below
- PartialProfile* pProf = getProfile (isRaw ? options.defProfRaw : options.defProfImg);
+ const PartialProfile* pProf = getProfile (isRaw ? options.defProfRaw : options.defProfImg);
// NOTE: pProf should not be NULL anymore, since init() should have created the default profiles already
return pProf;
}
diff --git a/rtgui/profilestore.h b/rtgui/profilestore.h
index 40d3def30..a58c51da5 100644
--- a/rtgui/profilestore.h
+++ b/rtgui/profilestore.h
@@ -46,10 +46,10 @@ class ProfileStore {
~ProfileStore();
bool init ();
void parseProfiles ();
- rtengine::procparams::PartialProfile* getProfile (const Glib::ustring& profname);
- std::vector getProfileNames ();
- rtengine::procparams::ProcParams* getDefaultProcParams (bool isRaw);
- rtengine::procparams::PartialProfile* getDefaultPartialProfile (bool isRaw);
+ const rtengine::procparams::PartialProfile* getProfile (const Glib::ustring& profname);
+ std::vector getProfileNames ();
+ const rtengine::procparams::ProcParams* getDefaultProcParams (bool isRaw);
+ const rtengine::procparams::PartialProfile* getDefaultPartialProfile (bool isRaw);
};
extern ProfileStore profileStore;
diff --git a/rtgui/thumbnail.cc b/rtgui/thumbnail.cc
index fe3499b96..8d06da256 100644
--- a/rtgui/thumbnail.cc
+++ b/rtgui/thumbnail.cc
@@ -233,7 +233,7 @@ void Thumbnail::loadProcParams () {
pparamsValid = false;
pparams.setDefaults();
- PartialProfile *defaultPP = profileStore.getDefaultPartialProfile(getType()==FT_Raw);
+ const PartialProfile *defaultPP = profileStore.getDefaultPartialProfile(getType()==FT_Raw);
defaultPP->applyTo(&pparams);
if (options.paramsLoadLocation==PLL_Input) {
diff --git a/tools/source_icons/scalable/profile-filled.file b/tools/source_icons/scalable/profile-filled.file
new file mode 100644
index 000000000..7e877241a
--- /dev/null
+++ b/tools/source_icons/scalable/profile-filled.file
@@ -0,0 +1 @@
+profile-filled.png,w22
diff --git a/tools/source_icons/scalable/profile-filled.svg b/tools/source_icons/scalable/profile-filled.svg
new file mode 100644
index 000000000..fadc80267
--- /dev/null
+++ b/tools/source_icons/scalable/profile-filled.svg
@@ -0,0 +1,746 @@
+
+
+
+
diff --git a/tools/source_icons/scalable/profile-partial.file b/tools/source_icons/scalable/profile-partial.file
new file mode 100644
index 000000000..0ac99aaaf
--- /dev/null
+++ b/tools/source_icons/scalable/profile-partial.file
@@ -0,0 +1 @@
+profile-partial.png,w22
diff --git a/tools/source_icons/scalable/profile-partial.svg b/tools/source_icons/scalable/profile-partial.svg
new file mode 100644
index 000000000..d379fc471
--- /dev/null
+++ b/tools/source_icons/scalable/profile-partial.svg
@@ -0,0 +1,732 @@
+
+
+
+