Committing patch from issue 1240: "Partial profile handling"
This commit is contained in:
parent
c21fa69aea
commit
dd93fff44c
@ -731,10 +731,14 @@ PROFILEPANEL_PLASTPHOTO;Photo précédente
|
|||||||
PROFILEPANEL_PLASTSAVED;Dernière sauvegarde
|
PROFILEPANEL_PLASTSAVED;Dernière sauvegarde
|
||||||
PROFILEPANEL_PROFILE;Profil
|
PROFILEPANEL_PROFILE;Profil
|
||||||
PROFILEPANEL_SAVEDLGLABEL;Enregistrer les paramètres de post-traitement...
|
PROFILEPANEL_SAVEDLGLABEL;Enregistrer les paramètres de post-traitement...
|
||||||
PROFILEPANEL_TOOLTIPCOPY;Copie le profil courant dans le presse-papier
|
PROFILEPANEL_COPYPPASTE;Paramètres à copier
|
||||||
PROFILEPANEL_TOOLTIPLOAD;Charger un profil depuis un fichier
|
PROFILEPANEL_LOADPPASTE;Paramètres à charger
|
||||||
PROFILEPANEL_TOOLTIPPASTE; Colle le profil depuis le presse-papier
|
PROFILEPANEL_PASTEPPASTE;Paramètres à coller
|
||||||
PROFILEPANEL_TOOLTIPSAVE;Enregistrer le profil actuel
|
PROFILEPANEL_SAVEPPASTE;Paramètres à enregistrer
|
||||||
|
PROFILEPANEL_TOOLTIPCOPY;Copie le profil courant dans le presse-papier\nCTRL-clic pour sélectionner les paramètres à copier
|
||||||
|
PROFILEPANEL_TOOLTIPLOAD;Charger un profil depuis un fichier\nCTRL-clic pour sélectionner les paramètres à charger
|
||||||
|
PROFILEPANEL_TOOLTIPPASTE;Colle le profil depuis le presse-papier\nCTRL-clic pour sélectionner les paramètres à coller
|
||||||
|
PROFILEPANEL_TOOLTIPSAVE;Enregistrer le profil actuel\nCTRL-clic pour sélectionner les paramètres à enregistrer
|
||||||
PROGRESSBAR_BADPIXELS;Pixels chauds/morts...
|
PROGRESSBAR_BADPIXELS;Pixels chauds/morts...
|
||||||
PROGRESSBAR_CACORRECTION;Correction de l'aberr. chomatique...
|
PROGRESSBAR_CACORRECTION;Correction de l'aberr. chomatique...
|
||||||
PROGRESSBAR_DARKFRAME;Trame Noire...
|
PROGRESSBAR_DARKFRAME;Trame Noire...
|
||||||
@ -808,6 +812,7 @@ TP_COLORSHIFT_GREENMAGENTA;Vert-Magenta
|
|||||||
TP_COLORSHIFT_LABEL;Décalage couleur
|
TP_COLORSHIFT_LABEL;Décalage couleur
|
||||||
TP_CROP_FIXRATIO;Ratio fixe:
|
TP_CROP_FIXRATIO;Ratio fixe:
|
||||||
TP_CROP_GTDIAGONALS;Règle des diagonales
|
TP_CROP_GTDIAGONALS;Règle des diagonales
|
||||||
|
TP_CROP_GTEPASSPORT;Passeport biométrique
|
||||||
TP_CROP_GTGRID;Grille
|
TP_CROP_GTGRID;Grille
|
||||||
TP_CROP_GTHARMMEANS1;Manière harmonique 1
|
TP_CROP_GTHARMMEANS1;Manière harmonique 1
|
||||||
TP_CROP_GTHARMMEANS2;Manière harmonique 2
|
TP_CROP_GTHARMMEANS2;Manière harmonique 2
|
||||||
@ -927,6 +932,7 @@ TP_PERSPECTIVE_LABEL;Perspective
|
|||||||
TP_PERSPECTIVE_VERTICAL;Verticale
|
TP_PERSPECTIVE_VERTICAL;Verticale
|
||||||
TP_PREPROCESS_GREENEQUIL;Équilibrage du vert
|
TP_PREPROCESS_GREENEQUIL;Équilibrage du vert
|
||||||
TP_PREPROCESS_HOTDEADPIXFILT;Filtrer les pixels chauds/morts
|
TP_PREPROCESS_HOTDEADPIXFILT;Filtrer les pixels chauds/morts
|
||||||
|
TP_PREPROCESS_HOTDEADPIXTHRESH;Seuil de détection des pixels morts
|
||||||
TP_PREPROCESS_LABEL;Traitement pre-dématriçage
|
TP_PREPROCESS_LABEL;Traitement pre-dématriçage
|
||||||
TP_PREPROCESS_LINEDENOISE;Filtre de bruit de ligne
|
TP_PREPROCESS_LINEDENOISE;Filtre de bruit de ligne
|
||||||
TP_PREPROCESS_NO_FOUND;Aucun trouvé
|
TP_PREPROCESS_NO_FOUND;Aucun trouvé
|
||||||
|
@ -748,10 +748,14 @@ PROFILEPANEL_PLASTPHOTO;Last Photo
|
|||||||
PROFILEPANEL_PLASTSAVED;Last Saved
|
PROFILEPANEL_PLASTSAVED;Last Saved
|
||||||
PROFILEPANEL_PROFILE;Profile
|
PROFILEPANEL_PROFILE;Profile
|
||||||
PROFILEPANEL_SAVEDLGLABEL;Save Postprocessing Parameters...
|
PROFILEPANEL_SAVEDLGLABEL;Save Postprocessing Parameters...
|
||||||
PROFILEPANEL_TOOLTIPCOPY;Copy current profile to clipboard
|
PROFILEPANEL_COPYPPASTE;Parameters to copy
|
||||||
PROFILEPANEL_TOOLTIPLOAD;Load a profile from file
|
PROFILEPANEL_LOADPPASTE;Parameters to load
|
||||||
PROFILEPANEL_TOOLTIPPASTE; Paste profile from clipboard
|
PROFILEPANEL_PASTEPPASTE;Parameters to paste
|
||||||
PROFILEPANEL_TOOLTIPSAVE;Save current profile
|
PROFILEPANEL_SAVEPPASTE;Parameters to save
|
||||||
|
PROFILEPANEL_TOOLTIPCOPY;Copy current profile to clipboard\nCTRL-click to select the parameters to copy
|
||||||
|
PROFILEPANEL_TOOLTIPLOAD;Load a profile from file\nCTRL-click to select the parameters to load
|
||||||
|
PROFILEPANEL_TOOLTIPPASTE;Paste profile from clipboard\nCTRL-click key to select the parameters to paste
|
||||||
|
PROFILEPANEL_TOOLTIPSAVE;Save current profile\nCTRL-click key to select the parameters to save
|
||||||
PROGRESSBAR_BADPIXELS;Bad pixels...
|
PROGRESSBAR_BADPIXELS;Bad pixels...
|
||||||
PROGRESSBAR_CACORRECTION;CA correction...
|
PROGRESSBAR_CACORRECTION;CA correction...
|
||||||
PROGRESSBAR_DARKFRAME;Darkframe...
|
PROGRESSBAR_DARKFRAME;Darkframe...
|
||||||
@ -955,6 +959,7 @@ TP_PERSPECTIVE_LABEL;Perspective
|
|||||||
TP_PERSPECTIVE_VERTICAL;Vertical
|
TP_PERSPECTIVE_VERTICAL;Vertical
|
||||||
TP_PREPROCESS_GREENEQUIL;Green equilibration
|
TP_PREPROCESS_GREENEQUIL;Green equilibration
|
||||||
TP_PREPROCESS_HOTDEADPIXFILT;Apply hot/dead pixel filter
|
TP_PREPROCESS_HOTDEADPIXFILT;Apply hot/dead pixel filter
|
||||||
|
TP_PREPROCESS_HOTDEADPIXTHRESH;Hot/dead pixel detection threshold
|
||||||
TP_PREPROCESS_LABEL;Preprocessing
|
TP_PREPROCESS_LABEL;Preprocessing
|
||||||
TP_PREPROCESS_LINEDENOISE;Line noise filter
|
TP_PREPROCESS_LINEDENOISE;Line noise filter
|
||||||
TP_PREPROCESS_NO_FOUND;None found
|
TP_PREPROCESS_NO_FOUND;None found
|
||||||
@ -1101,4 +1106,5 @@ ZOOMPANEL_ZOOMFITSCREEN;Fit to screen <b>F</b>
|
|||||||
ZOOMPANEL_ZOOMIN;Zoom In <b>+</b>
|
ZOOMPANEL_ZOOMIN;Zoom In <b>+</b>
|
||||||
ZOOMPANEL_ZOOMOUT;Zoom Out <b>-</b>
|
ZOOMPANEL_ZOOMOUT;Zoom Out <b>-</b>
|
||||||
#00 default translation file
|
#00 default translation file
|
||||||
#01 Developers should add translations to this file and then run 'generateDifferences.sh' script to update other locales.
|
#01 Developers should add translations to this file and then run 'generateTranslationDiffs' script to update other locales.
|
||||||
|
#02 WARNING: This script works on Linux only
|
||||||
|
@ -19,7 +19,7 @@ Black=0
|
|||||||
HighlightCompr=0
|
HighlightCompr=0
|
||||||
HighlightComprThreshold=33
|
HighlightComprThreshold=33
|
||||||
ShadowCompr=50
|
ShadowCompr=50
|
||||||
Curve=1;0;0;0.040000000000000015;0.029999999999999995;0.17684498029510265;0.21732319394192093;0.70232558139534862;0.74883720930232545;1;1;
|
Curve=1;0;0;0.04;0.03;0.17684498029510265;0.21732319394192093;0.70232558139534862;0.74883720930232545;1;1;
|
||||||
|
|
||||||
[Channel Mixer]
|
[Channel Mixer]
|
||||||
Red=100;0;0;
|
Red=100;0;0;
|
||||||
@ -53,6 +53,15 @@ DeconvAmount=75
|
|||||||
DeconvDamping=20
|
DeconvDamping=20
|
||||||
DeconvIterations=30
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
[SharpenEdge]
|
[SharpenEdge]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Passes=2
|
Passes=2
|
||||||
@ -65,20 +74,10 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5000
|
Temperature=5745
|
||||||
Green=1
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
@ -97,15 +96,6 @@ Gamma=2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4281
|
|
||||||
H=2871
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4281
|
|
||||||
Height=2871
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -193,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -53,6 +53,15 @@ DeconvAmount=75
|
|||||||
DeconvDamping=20
|
DeconvDamping=20
|
||||||
DeconvIterations=30
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
[SharpenEdge]
|
[SharpenEdge]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Passes=2
|
Passes=2
|
||||||
@ -65,20 +74,10 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5000
|
Temperature=5745
|
||||||
Green=1
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
@ -97,15 +96,6 @@ Gamma=2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4281
|
|
||||||
H=2871
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4281
|
|
||||||
Height=2871
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -193,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -53,6 +53,15 @@ DeconvAmount=75
|
|||||||
DeconvDamping=20
|
DeconvDamping=20
|
||||||
DeconvIterations=30
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
[SharpenEdge]
|
[SharpenEdge]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Passes=2
|
Passes=2
|
||||||
@ -65,21 +74,11 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5000
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Threshold=50
|
Threshold=50
|
||||||
@ -97,15 +96,6 @@ Gamma=2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4276
|
|
||||||
H=2836
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4276
|
|
||||||
Height=2836
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -193,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -53,6 +53,15 @@ DeconvAmount=75
|
|||||||
DeconvDamping=20
|
DeconvDamping=20
|
||||||
DeconvIterations=30
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
[SharpenEdge]
|
[SharpenEdge]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Passes=2
|
Passes=2
|
||||||
@ -65,21 +74,11 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5000
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Threshold=50
|
Threshold=50
|
||||||
@ -97,15 +96,6 @@ Gamma=2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4276
|
|
||||||
H=2836
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4276
|
|
||||||
Height=2836
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -193,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -53,6 +53,15 @@ DeconvAmount=75
|
|||||||
DeconvDamping=20
|
DeconvDamping=20
|
||||||
DeconvIterations=30
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
[SharpenEdge]
|
[SharpenEdge]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Passes=2
|
Passes=2
|
||||||
@ -65,20 +74,10 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5000
|
Temperature=5745
|
||||||
Green=1
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
@ -97,15 +96,6 @@ Gamma=2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4281
|
|
||||||
H=2871
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4281
|
|
||||||
Height=2871
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -193,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -53,6 +53,15 @@ DeconvAmount=75
|
|||||||
DeconvDamping=20
|
DeconvDamping=20
|
||||||
DeconvIterations=30
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
[SharpenEdge]
|
[SharpenEdge]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Passes=2
|
Passes=2
|
||||||
@ -65,20 +74,10 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5000
|
Temperature=5745
|
||||||
Green=1
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
@ -97,15 +96,6 @@ Gamma=2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4281
|
|
||||||
H=2871
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4281
|
|
||||||
Height=2871
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -193,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -53,6 +53,15 @@ DeconvAmount=75
|
|||||||
DeconvDamping=20
|
DeconvDamping=20
|
||||||
DeconvIterations=30
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
[SharpenEdge]
|
[SharpenEdge]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Passes=2
|
Passes=2
|
||||||
@ -65,20 +74,10 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5000
|
Temperature=5745
|
||||||
Green=1
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
@ -97,15 +96,6 @@ Gamma=2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4281
|
|
||||||
H=2871
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4281
|
|
||||||
Height=2871
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -193,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -11,7 +11,7 @@ InTrash=false
|
|||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
Clip=0
|
Clip=0
|
||||||
Compensation=-0
|
Compensation=0.0
|
||||||
Brightness=0
|
Brightness=0
|
||||||
Contrast=0
|
Contrast=0
|
||||||
Saturation=0
|
Saturation=0
|
||||||
@ -74,20 +74,10 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0353332844067824
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
@ -106,15 +96,6 @@ Gamma=2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -125,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4276
|
|
||||||
H=2836
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1.0
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4281
|
|
||||||
Height=2871
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -202,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -74,20 +74,10 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0349999999999993
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
@ -106,15 +96,6 @@ Gamma=2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -125,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4276
|
|
||||||
H=2836
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1.0
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4276
|
|
||||||
Height=2836
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -202,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -53,6 +53,15 @@ DeconvAmount=75
|
|||||||
DeconvDamping=20
|
DeconvDamping=20
|
||||||
DeconvIterations=30
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
[SharpenEdge]
|
[SharpenEdge]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Passes=2
|
Passes=2
|
||||||
@ -65,20 +74,10 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5000
|
Temperature=5745
|
||||||
Green=1
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=true
|
Enabled=true
|
||||||
@ -97,15 +96,6 @@ Gamma=1.2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4281
|
|
||||||
H=2871
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4281
|
|
||||||
Height=2871
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -193,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -53,6 +53,15 @@ DeconvAmount=75
|
|||||||
DeconvDamping=20
|
DeconvDamping=20
|
||||||
DeconvIterations=30
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
[SharpenEdge]
|
[SharpenEdge]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Passes=2
|
Passes=2
|
||||||
@ -65,20 +74,10 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5000
|
Temperature=5745
|
||||||
Green=1
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=true
|
Enabled=true
|
||||||
@ -97,15 +96,6 @@ Gamma=1.2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4281
|
|
||||||
H=2871
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4281
|
|
||||||
Height=2871
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -193,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -53,6 +53,15 @@ DeconvAmount=75
|
|||||||
DeconvDamping=20
|
DeconvDamping=20
|
||||||
DeconvIterations=30
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
[SharpenEdge]
|
[SharpenEdge]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Passes=2
|
Passes=2
|
||||||
@ -65,20 +74,10 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5000
|
Temperature=5745
|
||||||
Green=1
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
@ -97,15 +96,6 @@ Gamma=2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4281
|
|
||||||
H=2871
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4281
|
|
||||||
Height=2871
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -193,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
216
rtdata/profiles/full neutral.pp3
Normal file
216
rtdata/profiles/full neutral.pp3
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
|
||||||
|
[Version]
|
||||||
|
AppVersion=4.0.6
|
||||||
|
Version=301
|
||||||
|
|
||||||
|
[General]
|
||||||
|
Rank=0
|
||||||
|
ColorLabel=0
|
||||||
|
InTrash=false
|
||||||
|
|
||||||
|
[Exposure]
|
||||||
|
Auto=false
|
||||||
|
Clip=0.0000
|
||||||
|
Compensation=0
|
||||||
|
Brightness=0
|
||||||
|
Contrast=0
|
||||||
|
Saturation=0
|
||||||
|
Black=0
|
||||||
|
HighlightCompr=0
|
||||||
|
HighlightComprThreshold=0
|
||||||
|
ShadowCompr=0
|
||||||
|
Curve=0;
|
||||||
|
|
||||||
|
[Channel Mixer]
|
||||||
|
Red=100;0;0;
|
||||||
|
Green=0;100;0;
|
||||||
|
Blue=0;0;100;
|
||||||
|
|
||||||
|
[Luminance Curve]
|
||||||
|
Brightness=0
|
||||||
|
Contrast=0
|
||||||
|
Saturation=0
|
||||||
|
AvoidColorClipping=false
|
||||||
|
SaturationLimiter=false
|
||||||
|
SaturationLimit=50
|
||||||
|
LCurve=0;
|
||||||
|
aCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
|
[Sharpening]
|
||||||
|
Enabled=false
|
||||||
|
Method=usm
|
||||||
|
Radius=0.5
|
||||||
|
Amount=125
|
||||||
|
Threshold=512
|
||||||
|
OnlyEdges=false
|
||||||
|
EdgedetectionRadius=1.9
|
||||||
|
EdgeTolerance=1800
|
||||||
|
HalocontrolEnabled=false
|
||||||
|
HalocontrolAmount=85
|
||||||
|
DeconvRadius=0.75
|
||||||
|
DeconvAmount=75
|
||||||
|
DeconvDamping=20
|
||||||
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
|
[SharpenEdge]
|
||||||
|
Enabled=false
|
||||||
|
Passes=2
|
||||||
|
Strength=50
|
||||||
|
ThreeChannels=false
|
||||||
|
|
||||||
|
[SharpenMicro]
|
||||||
|
Enabled=false
|
||||||
|
Matrix=false
|
||||||
|
Strength=20
|
||||||
|
Uniformity=50
|
||||||
|
|
||||||
|
[White Balance]
|
||||||
|
Setting=Camera
|
||||||
|
Temperature=5745
|
||||||
|
Green=1.0
|
||||||
|
|
||||||
|
[Impulse Denoising]
|
||||||
|
Enabled=false
|
||||||
|
Threshold=50
|
||||||
|
|
||||||
|
[Defringing]
|
||||||
|
Enabled=false
|
||||||
|
Radius=2.0
|
||||||
|
Threshold=25
|
||||||
|
|
||||||
|
[Directional Pyramid Denoising]
|
||||||
|
Enabled=false
|
||||||
|
Luma=5
|
||||||
|
Chroma=5
|
||||||
|
Gamma=2
|
||||||
|
LumCurve=0;
|
||||||
|
ChromCurve=0;
|
||||||
|
|
||||||
|
[Shadows & Highlights]
|
||||||
|
Enabled=false
|
||||||
|
HighQuality=false
|
||||||
|
Highlights=10
|
||||||
|
HighlightTonalWidth=80
|
||||||
|
Shadows=10
|
||||||
|
ShadowTonalWidth=80
|
||||||
|
LocalContrast=0
|
||||||
|
Radius=30
|
||||||
|
|
||||||
|
[Crop]
|
||||||
|
Enabled=false
|
||||||
|
X=0
|
||||||
|
Y=0
|
||||||
|
W=4276
|
||||||
|
H=2836
|
||||||
|
FixedRatio=false
|
||||||
|
Ratio=3:2
|
||||||
|
Orientation=Landscape
|
||||||
|
Guide=None
|
||||||
|
|
||||||
|
[Coarse Transformation]
|
||||||
|
Rotate=0
|
||||||
|
HorizontalFlip=false
|
||||||
|
VerticalFlip=false
|
||||||
|
|
||||||
|
[Common Properties for Transformations]
|
||||||
|
AutoFill=false
|
||||||
|
|
||||||
|
[Rotation]
|
||||||
|
Degree=0
|
||||||
|
|
||||||
|
[Distortion]
|
||||||
|
Amount=0
|
||||||
|
UseLensFun=false
|
||||||
|
|
||||||
|
[Perspective]
|
||||||
|
Horizontal=0
|
||||||
|
Vertical=0
|
||||||
|
|
||||||
|
[CACorrection]
|
||||||
|
Red=0
|
||||||
|
Blue=0
|
||||||
|
|
||||||
|
[Vignetting Correction]
|
||||||
|
Amount=0
|
||||||
|
Radius=50
|
||||||
|
Strength=1
|
||||||
|
CenterX=0
|
||||||
|
CenterY=0
|
||||||
|
|
||||||
|
[HLRecovery]
|
||||||
|
Enabled=false
|
||||||
|
Method=Blend
|
||||||
|
|
||||||
|
[Resize]
|
||||||
|
Enabled=false
|
||||||
|
Scale=1
|
||||||
|
AppliesTo=Cropped area
|
||||||
|
Method=Bicubic
|
||||||
|
DataSpecified=0
|
||||||
|
Width=4276
|
||||||
|
Height=2836
|
||||||
|
|
||||||
|
[Color Management]
|
||||||
|
InputProfile=(cameraICC)
|
||||||
|
BlendCMSMatrix=true
|
||||||
|
WorkingProfile=sRGB
|
||||||
|
OutputProfile=RT_sRGB
|
||||||
|
Gammafree=default
|
||||||
|
Freegamma=false
|
||||||
|
GammaValue=2.22
|
||||||
|
GammaSlope=4.5
|
||||||
|
|
||||||
|
[Directional Pyramid Equalizer]
|
||||||
|
Enabled=false
|
||||||
|
Mult0=1
|
||||||
|
Mult1=1
|
||||||
|
Mult2=1
|
||||||
|
Mult3=1
|
||||||
|
Mult4=0.2
|
||||||
|
|
||||||
|
[HSV Equalizer]
|
||||||
|
HCurve=0;
|
||||||
|
SCurve=0;
|
||||||
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
|
[RAW]
|
||||||
|
DarkFrame=
|
||||||
|
DarkFrameAuto=false
|
||||||
|
FlatFieldFile=
|
||||||
|
FlatFieldAutoSelect=false
|
||||||
|
FlatFieldBlurRadius=32
|
||||||
|
FlatFieldBlurType=Area Flatfield
|
||||||
|
CA=false
|
||||||
|
CARed=0
|
||||||
|
CABlue=0
|
||||||
|
HotDeadPixels=false
|
||||||
|
HotDeadPixelThresh=40
|
||||||
|
LineDenoise=0
|
||||||
|
GreenEqThreshold=0
|
||||||
|
CcSteps=1
|
||||||
|
Method=amaze
|
||||||
|
DCBIterations=2
|
||||||
|
DCBEnhance=false
|
||||||
|
ALLEnhance=false
|
||||||
|
PreExposure=1
|
||||||
|
PrePreserv=0
|
||||||
|
PreBlackzero=0
|
||||||
|
PreBlackone=0
|
||||||
|
PreBlacktwo=0
|
||||||
|
PreBlackthree=0
|
||||||
|
PreTwoGreen=true
|
@ -53,6 +53,15 @@ DeconvAmount=75
|
|||||||
DeconvDamping=20
|
DeconvDamping=20
|
||||||
DeconvIterations=30
|
DeconvIterations=30
|
||||||
|
|
||||||
|
[Vibrance]
|
||||||
|
Enabled=false
|
||||||
|
Pastels=50
|
||||||
|
Saturated=50
|
||||||
|
PSThreshold=75
|
||||||
|
ProtectSkins=false
|
||||||
|
AvoidColorShift=true
|
||||||
|
PastSatTog=true
|
||||||
|
|
||||||
[SharpenEdge]
|
[SharpenEdge]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Passes=2
|
Passes=2
|
||||||
@ -65,20 +74,10 @@ Matrix=false
|
|||||||
Strength=20
|
Strength=20
|
||||||
Uniformity=50
|
Uniformity=50
|
||||||
|
|
||||||
[Color Boost]
|
|
||||||
Amount=0
|
|
||||||
AvoidColorClipping=false
|
|
||||||
SaturationLimiter=false
|
|
||||||
SaturationLimit=75
|
|
||||||
|
|
||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5200
|
Temperature=5745
|
||||||
Green=1
|
Green=1.0
|
||||||
|
|
||||||
[Color Shift]
|
|
||||||
ChannelA=0
|
|
||||||
ChannelB=0
|
|
||||||
|
|
||||||
[Impulse Denoising]
|
[Impulse Denoising]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
@ -86,7 +85,7 @@ Threshold=50
|
|||||||
|
|
||||||
[Defringing]
|
[Defringing]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Radius=2
|
Radius=2.0
|
||||||
Threshold=25
|
Threshold=25
|
||||||
|
|
||||||
[Directional Pyramid Denoising]
|
[Directional Pyramid Denoising]
|
||||||
@ -97,15 +96,6 @@ Gamma=2
|
|||||||
LumCurve=0;
|
LumCurve=0;
|
||||||
ChromCurve=0;
|
ChromCurve=0;
|
||||||
|
|
||||||
[Luminance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Radius=2.5
|
|
||||||
EdgeTolerance=1500
|
|
||||||
|
|
||||||
[Chrominance Denoising]
|
|
||||||
Enabled=false
|
|
||||||
Amount=20
|
|
||||||
|
|
||||||
[Shadows & Highlights]
|
[Shadows & Highlights]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
HighQuality=false
|
HighQuality=false
|
||||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
|||||||
LocalContrast=0
|
LocalContrast=0
|
||||||
Radius=30
|
Radius=30
|
||||||
|
|
||||||
[Crop]
|
|
||||||
Enabled=false
|
|
||||||
X=0
|
|
||||||
Y=0
|
|
||||||
W=4276
|
|
||||||
H=2836
|
|
||||||
FixedRatio=false
|
|
||||||
Ratio=3:2
|
|
||||||
Orientation=Landscape
|
|
||||||
Guide=None
|
|
||||||
|
|
||||||
[Coarse Transformation]
|
|
||||||
Rotate=0
|
|
||||||
HorizontalFlip=false
|
|
||||||
VerticalFlip=false
|
|
||||||
|
|
||||||
[Common Properties for Transformations]
|
[Common Properties for Transformations]
|
||||||
AutoFill=false
|
AutoFill=false
|
||||||
|
|
||||||
[Rotation]
|
|
||||||
Degree=0
|
|
||||||
|
|
||||||
[Distortion]
|
|
||||||
Amount=0
|
|
||||||
UseLensFun=false
|
|
||||||
|
|
||||||
[Perspective]
|
|
||||||
Horizontal=0
|
|
||||||
Vertical=0
|
|
||||||
|
|
||||||
[CACorrection]
|
|
||||||
Red=0
|
|
||||||
Blue=0
|
|
||||||
|
|
||||||
[Vignetting Correction]
|
|
||||||
Amount=0
|
|
||||||
Radius=50
|
|
||||||
Strength=1
|
|
||||||
CenterX=0
|
|
||||||
CenterY=0
|
|
||||||
|
|
||||||
[HLRecovery]
|
[HLRecovery]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
Method=Blend
|
Method=Blend
|
||||||
|
|
||||||
[Resize]
|
|
||||||
Enabled=false
|
|
||||||
Scale=1
|
|
||||||
AppliesTo=Cropped area
|
|
||||||
Method=Bicubic
|
|
||||||
DataSpecified=0
|
|
||||||
Width=4276
|
|
||||||
Height=2836
|
|
||||||
|
|
||||||
[Color Management]
|
[Color Management]
|
||||||
InputProfile=(cameraICC)
|
InputProfile=(cameraICC)
|
||||||
BlendCMSMatrix=true
|
BlendCMSMatrix=true
|
||||||
@ -193,13 +136,12 @@ HCurve=0;
|
|||||||
SCurve=0;
|
SCurve=0;
|
||||||
VCurve=0;
|
VCurve=0;
|
||||||
|
|
||||||
|
[RGB Curves]
|
||||||
|
rCurve=0;
|
||||||
|
gCurve=0;
|
||||||
|
bCurve=0;
|
||||||
|
|
||||||
[RAW]
|
[RAW]
|
||||||
DarkFrame=
|
|
||||||
DarkFrameAuto=false
|
|
||||||
FlatFieldFile=
|
|
||||||
FlatFieldAutoSelect=false
|
|
||||||
FlatFieldBlurRadius=32
|
|
||||||
FlatFieldBlurType=Area Flatfield
|
|
||||||
CA=false
|
CA=false
|
||||||
CARed=0
|
CARed=0
|
||||||
CABlue=0
|
CABlue=0
|
||||||
|
@ -277,9 +277,9 @@ ImageData::~ImageData () {
|
|||||||
iptc_data_free (iptc);
|
iptc_data_free (iptc);
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<procparams::IPTCPair> ImageData::getIPTCData () const {
|
const procparams::IPTCPairs ImageData::getIPTCData () const {
|
||||||
|
|
||||||
std::vector<procparams::IPTCPair> iptcc;
|
procparams::IPTCPairs iptcc;
|
||||||
if (!iptc)
|
if (!iptc)
|
||||||
return iptcc;
|
return iptcc;
|
||||||
|
|
||||||
@ -288,31 +288,28 @@ const std::vector<procparams::IPTCPair> ImageData::getIPTCData () const {
|
|||||||
IptcDataSet* ds = iptc_data_get_next_dataset (iptc, NULL, IPTC_RECORD_APP_2, strTags[i].tag);
|
IptcDataSet* ds = iptc_data_get_next_dataset (iptc, NULL, IPTC_RECORD_APP_2, strTags[i].tag);
|
||||||
if (ds) {
|
if (ds) {
|
||||||
iptc_dataset_get_data (ds, buffer, 2100);
|
iptc_dataset_get_data (ds, buffer, 2100);
|
||||||
procparams::IPTCPair ic;
|
std::vector<Glib::ustring> icValues;
|
||||||
ic.field = strTags[i].field;
|
icValues.push_back (safe_locale_to_utf8((char*)buffer));
|
||||||
ic.values.push_back (safe_locale_to_utf8((char*)buffer));
|
|
||||||
|
|
||||||
iptcc.push_back (ic);
|
iptcc[strTags[i].field] = icValues;
|
||||||
iptc_dataset_unref (ds);
|
iptc_dataset_unref (ds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
IptcDataSet* ds = NULL;
|
IptcDataSet* ds = NULL;
|
||||||
procparams::IPTCPair ickw;
|
std::vector<Glib::ustring> keywords;
|
||||||
ickw.field = "Keywords";
|
|
||||||
while ((ds=iptc_data_get_next_dataset (iptc, ds, IPTC_RECORD_APP_2, IPTC_TAG_KEYWORDS))) {
|
while ((ds=iptc_data_get_next_dataset (iptc, ds, IPTC_RECORD_APP_2, IPTC_TAG_KEYWORDS))) {
|
||||||
iptc_dataset_get_data (ds, buffer, 2100);
|
iptc_dataset_get_data (ds, buffer, 2100);
|
||||||
ickw.values.push_back (safe_locale_to_utf8((char*)buffer));
|
keywords.push_back (safe_locale_to_utf8((char*)buffer));
|
||||||
}
|
}
|
||||||
iptcc.push_back (ickw);
|
iptcc["Keywords"] = keywords;
|
||||||
ds = NULL;
|
ds = NULL;
|
||||||
procparams::IPTCPair icsc;
|
std::vector<Glib::ustring> suppCategories;
|
||||||
icsc.field = "SupplementalCategories";
|
|
||||||
while ((ds=iptc_data_get_next_dataset (iptc, ds, IPTC_RECORD_APP_2, IPTC_TAG_SUPPL_CATEGORY))) {
|
while ((ds=iptc_data_get_next_dataset (iptc, ds, IPTC_RECORD_APP_2, IPTC_TAG_SUPPL_CATEGORY))) {
|
||||||
iptc_dataset_get_data (ds, buffer, 2100);
|
iptc_dataset_get_data (ds, buffer, 2100);
|
||||||
icsc.values.push_back (safe_locale_to_utf8((char*)buffer));
|
suppCategories.push_back (safe_locale_to_utf8((char*)buffer));
|
||||||
iptc_dataset_unref (ds);
|
iptc_dataset_unref (ds);
|
||||||
}
|
}
|
||||||
iptcc.push_back (icsc);
|
iptcc["SupplementalCategories"] = suppCategories;
|
||||||
return iptcc;
|
return iptcc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ class ImageData : public ImageMetaData {
|
|||||||
virtual ~ImageData ();
|
virtual ~ImageData ();
|
||||||
|
|
||||||
const rtexif::TagDirectory* getExifData () const { return root; }
|
const rtexif::TagDirectory* getExifData () const { return root; }
|
||||||
const std::vector<procparams::IPTCPair> getIPTCData () const;
|
const procparams::IPTCPairs getIPTCData () const;
|
||||||
|
|
||||||
bool hasExif () const { return root && root->getCount(); }
|
bool hasExif () const { return root && root->getCount(); }
|
||||||
bool hasIPTC () const { return iptc; }
|
bool hasIPTC () const { return iptc; }
|
||||||
|
@ -61,14 +61,17 @@ void ImageIO::setMetadata (const rtexif::TagDirectory* eroot) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// For merging with RT specific data
|
// For merging with RT specific data
|
||||||
void ImageIO::setMetadata (const rtexif::TagDirectory* eroot, const std::vector<ExifPair>& exif, const std::vector<IPTCPair>& iptcc) {
|
void ImageIO::setMetadata (const rtexif::TagDirectory* eroot, const rtengine::procparams::ExifPairs& exif, const rtengine::procparams::IPTCPairs& iptcc) {
|
||||||
|
|
||||||
// store exif info
|
// store exif info
|
||||||
exifChange.resize (exif.size());
|
exifChange.clear();
|
||||||
for (int i=0; i<exif.size(); i++) {
|
exifChange = exif;
|
||||||
exifChange[i].first = exif[i].field;
|
/*unsigned int j=0;
|
||||||
exifChange[i].second = exif[i].value;
|
for (rtengine::procparams::ExifPairs::const_iterator i=exif.begin(); i!=exif.end(); i++) {
|
||||||
}
|
exifChange.at(j).first = i->first;
|
||||||
|
exifChange.at(j).second = i->second;
|
||||||
|
j++;
|
||||||
|
}*/
|
||||||
|
|
||||||
if (exifRoot!=NULL) { delete exifRoot; exifRoot = NULL; }
|
if (exifRoot!=NULL) { delete exifRoot; exifRoot = NULL; }
|
||||||
|
|
||||||
@ -82,23 +85,23 @@ void ImageIO::setMetadata (const rtexif::TagDirectory* eroot, const std::vector<
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
iptc = iptc_data_new ();
|
iptc = iptc_data_new ();
|
||||||
for (int i=0; i<iptcc.size(); i++) {
|
for (rtengine::procparams::IPTCPairs::const_iterator i=iptcc.begin(); i!=iptcc.end(); i++) {
|
||||||
if (iptcc[i].field == "Keywords" && !(iptcc[i].values.empty())) {
|
if (i->first == "Keywords" && !(i->second.empty())) {
|
||||||
for (int j=0; j<iptcc[i].values.size(); j++) {
|
for (unsigned int j=0; j<i->second.size(); j++) {
|
||||||
IptcDataSet * ds = iptc_dataset_new ();
|
IptcDataSet * ds = iptc_dataset_new ();
|
||||||
iptc_dataset_set_tag (ds, IPTC_RECORD_APP_2, IPTC_TAG_KEYWORDS);
|
iptc_dataset_set_tag (ds, IPTC_RECORD_APP_2, IPTC_TAG_KEYWORDS);
|
||||||
std::string loc = safe_locale_to_utf8(iptcc[i].values[j]);
|
std::string loc = safe_locale_to_utf8(i->second.at(j));
|
||||||
iptc_dataset_set_data (ds, (unsigned char*)loc.c_str(), MIN(64,loc.size()), IPTC_DONT_VALIDATE);
|
iptc_dataset_set_data (ds, (unsigned char*)loc.c_str(), MIN(64,loc.size()), IPTC_DONT_VALIDATE);
|
||||||
iptc_data_add_dataset (iptc, ds);
|
iptc_data_add_dataset (iptc, ds);
|
||||||
iptc_dataset_unref (ds);
|
iptc_dataset_unref (ds);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (iptcc[i].field == "SupplementalCategories" && !(iptcc[i].values.empty())) {
|
else if (i->first == "SupplementalCategories" && !(i->second.empty())) {
|
||||||
for (int j=0; j<iptcc[i].values.size(); j++) {
|
for (unsigned int j=0; j<i->second.size(); j++) {
|
||||||
IptcDataSet * ds = iptc_dataset_new ();
|
IptcDataSet * ds = iptc_dataset_new ();
|
||||||
iptc_dataset_set_tag (ds, IPTC_RECORD_APP_2, IPTC_TAG_SUPPL_CATEGORY);
|
iptc_dataset_set_tag (ds, IPTC_RECORD_APP_2, IPTC_TAG_SUPPL_CATEGORY);
|
||||||
std::string loc = safe_locale_to_utf8(iptcc[i].values[j]);
|
std::string loc = safe_locale_to_utf8(i->second.at(j));
|
||||||
iptc_dataset_set_data (ds, (unsigned char*)loc.c_str(), MIN(32,loc.size()), IPTC_DONT_VALIDATE);
|
iptc_dataset_set_data (ds, (unsigned char*)loc.c_str(), MIN(32,loc.size()), IPTC_DONT_VALIDATE);
|
||||||
iptc_data_add_dataset (iptc, ds);
|
iptc_data_add_dataset (iptc, ds);
|
||||||
iptc_dataset_unref (ds);
|
iptc_dataset_unref (ds);
|
||||||
@ -106,10 +109,10 @@ void ImageIO::setMetadata (const rtexif::TagDirectory* eroot, const std::vector<
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (int j=0; j<16; j++)
|
for (int j=0; j<16; j++)
|
||||||
if (iptcc[i].field == strTags[j].field && !(iptcc[i].values.empty())) {
|
if (i->first == strTags[j].field && !(i->second.empty())) {
|
||||||
IptcDataSet * ds = iptc_dataset_new ();
|
IptcDataSet * ds = iptc_dataset_new ();
|
||||||
iptc_dataset_set_tag (ds, IPTC_RECORD_APP_2, strTags[j].tag);
|
iptc_dataset_set_tag (ds, IPTC_RECORD_APP_2, strTags[j].tag);
|
||||||
std::string loc = safe_locale_to_utf8(iptcc[i].values[0]);
|
std::string loc = safe_locale_to_utf8(i->second.at(0));
|
||||||
iptc_dataset_set_data (ds, (unsigned char*)loc.c_str(), MIN(strTags[j].size,loc.size()), IPTC_DONT_VALIDATE);
|
iptc_dataset_set_data (ds, (unsigned char*)loc.c_str(), MIN(strTags[j].size,loc.size()), IPTC_DONT_VALIDATE);
|
||||||
iptc_data_add_dataset (iptc, ds);
|
iptc_data_add_dataset (iptc, ds);
|
||||||
iptc_dataset_unref (ds);
|
iptc_dataset_unref (ds);
|
||||||
@ -243,7 +246,7 @@ int ImageIO::loadPNG (Glib::ustring fname) {
|
|||||||
png_read_row (png, (png_byte*)row, NULL);
|
png_read_row (png, (png_byte*)row, NULL);
|
||||||
if (bit_depth==16) { // convert scanline to host byte order
|
if (bit_depth==16) { // convert scanline to host byte order
|
||||||
unsigned short* srow = (unsigned short*)row;
|
unsigned short* srow = (unsigned short*)row;
|
||||||
for (int j=0; j<width*3; j++)
|
for (unsigned int j=0; j<width*3; j++)
|
||||||
srow[j] = ntohs (srow[j]);
|
srow[j] = ntohs (srow[j]);
|
||||||
}
|
}
|
||||||
setScanline (i, row, bit_depth);
|
setScanline (i, row, bit_depth);
|
||||||
@ -565,7 +568,7 @@ int ImageIO::savePNG (Glib::ustring fname, int compression, volatile int bps) {
|
|||||||
unsigned char *row = new unsigned char [rowlen];
|
unsigned char *row = new unsigned char [rowlen];
|
||||||
|
|
||||||
png_write_info(png,info);
|
png_write_info(png,info);
|
||||||
for (unsigned int i=0;i<height;i++) {
|
for (int i=0;i<height;i++) {
|
||||||
getScanline (i, row, bps);
|
getScanline (i, row, bps);
|
||||||
if (bps==16) {
|
if (bps==16) {
|
||||||
// convert to network byte order
|
// convert to network byte order
|
||||||
@ -892,7 +895,7 @@ void png_flush(png_structp png_ptr) {
|
|||||||
|
|
||||||
int ImageIO::load (Glib::ustring fname) {
|
int ImageIO::load (Glib::ustring fname) {
|
||||||
|
|
||||||
int lastdot = fname.find_last_of ('.');
|
unsigned int lastdot = fname.find_last_of ('.');
|
||||||
if( Glib::ustring::npos == lastdot )
|
if( Glib::ustring::npos == lastdot )
|
||||||
return IMIO_FILETYPENOTSUPPORTED;
|
return IMIO_FILETYPENOTSUPPORTED;
|
||||||
if (!fname.casefold().compare (lastdot, 4, ".png"))
|
if (!fname.casefold().compare (lastdot, 4, ".png"))
|
||||||
@ -906,7 +909,7 @@ int ImageIO::load (Glib::ustring fname) {
|
|||||||
|
|
||||||
int ImageIO::save (Glib::ustring fname) {
|
int ImageIO::save (Glib::ustring fname) {
|
||||||
|
|
||||||
int lastdot = fname.find_last_of ('.');
|
unsigned int lastdot = fname.find_last_of ('.');
|
||||||
if( Glib::ustring::npos == lastdot )
|
if( Glib::ustring::npos == lastdot )
|
||||||
return IMIO_FILETYPENOTSUPPORTED;
|
return IMIO_FILETYPENOTSUPPORTED;
|
||||||
if (!fname.casefold().compare (lastdot, 4, ".png"))
|
if (!fname.casefold().compare (lastdot, 4, ".png"))
|
||||||
|
@ -44,7 +44,7 @@ class ImageIO {
|
|||||||
int profileLength;
|
int profileLength;
|
||||||
char* loadedProfileData;
|
char* loadedProfileData;
|
||||||
int loadedProfileLength;
|
int loadedProfileLength;
|
||||||
std::vector<std::pair<std::string,std::string> > exifChange;
|
procparams::ExifPairs exifChange;
|
||||||
IptcData* iptc;
|
IptcData* iptc;
|
||||||
const rtexif::TagDirectory* exifRoot;
|
const rtexif::TagDirectory* exifRoot;
|
||||||
Glib::Mutex imutex;
|
Glib::Mutex imutex;
|
||||||
@ -83,7 +83,7 @@ class ImageIO {
|
|||||||
void getEmbeddedProfileData (int& length, unsigned char*& pdata) { length = loadedProfileLength; pdata = (unsigned char*)loadedProfileData; }
|
void getEmbeddedProfileData (int& length, unsigned char*& pdata) { length = loadedProfileLength; pdata = (unsigned char*)loadedProfileData; }
|
||||||
|
|
||||||
void setMetadata (const rtexif::TagDirectory* eroot);
|
void setMetadata (const rtexif::TagDirectory* eroot);
|
||||||
void setMetadata (const rtexif::TagDirectory* eroot, const std::vector<rtengine::procparams::ExifPair>& exif, const std::vector<rtengine::procparams::IPTCPair>& iptcc);
|
void setMetadata (const rtexif::TagDirectory* eroot, const rtengine::procparams::ExifPairs& exif, const rtengine::procparams::IPTCPairs& iptcc);
|
||||||
void setOutputProfile (char* pdata, int plen);
|
void setOutputProfile (char* pdata, int plen);
|
||||||
Glib::Mutex& mutex () { return imutex; }
|
Glib::Mutex& mutex () { return imutex; }
|
||||||
};
|
};
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -22,6 +22,8 @@
|
|||||||
#include <glibmm.h>
|
#include <glibmm.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
class ParamsEdited;
|
||||||
|
|
||||||
namespace rtengine {
|
namespace rtengine {
|
||||||
namespace procparams {
|
namespace procparams {
|
||||||
|
|
||||||
@ -126,14 +128,14 @@ class VibranceParams {
|
|||||||
/**
|
/**
|
||||||
* Parameters of the color boost
|
* Parameters of the color boost
|
||||||
*/
|
*/
|
||||||
class ColorBoostParams {
|
/*class ColorBoostParams {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int amount;
|
int amount;
|
||||||
bool avoidclip;
|
bool avoidclip;
|
||||||
bool enable_saturationlimiter;
|
bool enable_saturationlimiter;
|
||||||
double saturationlimit;
|
double saturationlimit;
|
||||||
};
|
};*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameters of the white balance adjustments
|
* Parameters of the white balance adjustments
|
||||||
@ -179,36 +181,35 @@ class WBParams {
|
|||||||
/**
|
/**
|
||||||
* Parameters of the color shift
|
* Parameters of the color shift
|
||||||
*/
|
*/
|
||||||
class ColorShiftParams {
|
/*class ColorShiftParams {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
double a;
|
double a;
|
||||||
double b;
|
double b;
|
||||||
};
|
};*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameters of the luminance denoising
|
* Parameters of the luminance denoising
|
||||||
*/
|
*/
|
||||||
class LumaDenoiseParams {
|
/*class LumaDenoiseParams {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool enabled;
|
bool enabled;
|
||||||
double radius;
|
double radius;
|
||||||
int edgetolerance;
|
int edgetolerance;
|
||||||
};
|
};*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameters of the color denoising
|
* Parameters of the color denoising
|
||||||
*/
|
*/
|
||||||
class ColorDenoiseParams {
|
/*class ColorDenoiseParams {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool enabled;
|
bool enabled;
|
||||||
double radius;
|
|
||||||
int edgetolerance;
|
int edgetolerance;
|
||||||
bool edgesensitive;
|
bool edgesensitive;
|
||||||
int amount;
|
int amount;
|
||||||
};
|
};*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameters of defringing
|
* Parameters of defringing
|
||||||
@ -243,8 +244,6 @@ class ColorDenoiseParams {
|
|||||||
int luma;
|
int luma;
|
||||||
int chroma;
|
int chroma;
|
||||||
float gamma;
|
float gamma;
|
||||||
std::vector<double> lumcurve;
|
|
||||||
std::vector<double> chromcurve;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//EPD related parameters.
|
//EPD related parameters.
|
||||||
@ -420,24 +419,14 @@ class ColorManagementParams {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class representing a key/value for the exif metadata information
|
* Typedef for representing a key/value for the exif metadata information
|
||||||
*/
|
*/
|
||||||
class ExifPair {
|
typedef std::map<Glib::ustring, Glib::ustring> ExifPairs;
|
||||||
|
|
||||||
public:
|
|
||||||
Glib::ustring field;
|
|
||||||
Glib::ustring value;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The IPTC key/value pairs
|
* The IPTC key/value pairs
|
||||||
*/
|
*/
|
||||||
class IPTCPair {
|
typedef std::map<Glib::ustring, std::vector<Glib::ustring> > IPTCPairs;
|
||||||
|
|
||||||
public:
|
|
||||||
Glib::ustring field;
|
|
||||||
std::vector<Glib::ustring> values;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Directional pyramid equalizer params
|
* Directional pyramid equalizer params
|
||||||
@ -522,11 +511,11 @@ class ProcParams {
|
|||||||
SharpenEdgeParams sharpenEdge; ///< Sharpen edge parameters
|
SharpenEdgeParams sharpenEdge; ///< Sharpen edge parameters
|
||||||
SharpenMicroParams sharpenMicro; ///< Sharpen microcontrast parameters
|
SharpenMicroParams sharpenMicro; ///< Sharpen microcontrast parameters
|
||||||
VibranceParams vibrance; ///< Vibrance parameters
|
VibranceParams vibrance; ///< Vibrance parameters
|
||||||
ColorBoostParams colorBoost; ///< Color boost parameters
|
//ColorBoostParams colorBoost; ///< Color boost parameters
|
||||||
WBParams wb; ///< White balance parameters
|
WBParams wb; ///< White balance parameters
|
||||||
ColorShiftParams colorShift; ///< Color shift parameters
|
//ColorShiftParams colorShift; ///< Color shift parameters
|
||||||
LumaDenoiseParams lumaDenoise; ///< Luminance denoising parameters
|
//LumaDenoiseParams lumaDenoise; ///< Luminance denoising parameters
|
||||||
ColorDenoiseParams colorDenoise; ///< Color denoising parameters
|
//ColorDenoiseParams colorDenoise; ///< Color denoising parameters
|
||||||
DefringeParams defringe; ///< Defringing parameters
|
DefringeParams defringe; ///< Defringing parameters
|
||||||
ImpulseDenoiseParams impulseDenoise; ///< Impulse denoising parameters
|
ImpulseDenoiseParams impulseDenoise; ///< Impulse denoising parameters
|
||||||
DirPyrDenoiseParams dirpyrDenoise; ///< Directional Pyramid denoising parameters
|
DirPyrDenoiseParams dirpyrDenoise; ///< Directional Pyramid denoising parameters
|
||||||
@ -544,19 +533,19 @@ class ProcParams {
|
|||||||
HRecParams hlrecovery; ///< Highlight recovery parameters
|
HRecParams hlrecovery; ///< Highlight recovery parameters
|
||||||
ResizeParams resize; ///< Resize parameters
|
ResizeParams resize; ///< Resize parameters
|
||||||
ColorManagementParams icm; ///< profiles/color spaces used during the image processing
|
ColorManagementParams icm; ///< profiles/color spaces used during the image processing
|
||||||
ColorManagementParams gam; ///< profiles/color spaces used during the image processing
|
|
||||||
|
|
||||||
RAWParams raw; ///< RAW parameters before demosaicing
|
RAWParams raw; ///< RAW parameters before demosaicing
|
||||||
DirPyrEqualizerParams dirpyrequalizer; ///< directional pyramid equalizer parameters
|
DirPyrEqualizerParams dirpyrequalizer; ///< directional pyramid equalizer parameters
|
||||||
HSVEqualizerParams hsvequalizer; ///< hsv equalizer parameters
|
HSVEqualizerParams hsvequalizer; ///< hsv equalizer parameters
|
||||||
std::vector<ExifPair> exif; ///< List of modifications appplied on the exif tags of the input image
|
|
||||||
std::vector<IPTCPair> iptc; ///< The IPTC tags and values to be saved to the output image
|
|
||||||
char rank; ///< Custom image quality ranking
|
char rank; ///< Custom image quality ranking
|
||||||
char colorlabel; ///< Custom color label
|
char colorlabel; ///< Custom color label
|
||||||
bool inTrash; ///< Marks deleted image
|
bool inTrash; ///< Marks deleted image
|
||||||
Glib::ustring appVersion; ///< Version of the application that generated the parameters
|
Glib::ustring appVersion; ///< Version of the application that generated the parameters
|
||||||
int ppVersion; ///< Version of the PP file from which the parameters have been read
|
int ppVersion; ///< Version of the PP file from which the parameters have been read
|
||||||
|
|
||||||
|
ExifPairs exif; ///< List of modifications appplied on the exif tags of the input image
|
||||||
|
IPTCPairs iptc; ///< The IPTC tags and values to be saved to the output image
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The constructor only sets the hand-wired defaults.
|
* The constructor only sets the hand-wired defaults.
|
||||||
*/
|
*/
|
||||||
@ -570,15 +559,17 @@ class ProcParams {
|
|||||||
* save the same file in two different location, i.e. the cache and the image's directory
|
* save the same file in two different location, i.e. the cache and the image's directory
|
||||||
* @param fname the name of the first file (can be an empty string)
|
* @param fname the name of the first file (can be an empty string)
|
||||||
* @param fname2 the name of the second file (can be an empty string) (optional)
|
* @param fname2 the name of the second file (can be an empty string) (optional)
|
||||||
|
* @param pedited pointer to a ParamsEdited object (optional) to store which values has to be saved
|
||||||
* @return Error code (=0 if all supplied filenames where created correctly)
|
* @return Error code (=0 if all supplied filenames where created correctly)
|
||||||
*/
|
*/
|
||||||
int save (Glib::ustring fname, Glib::ustring fname2 = "") const;
|
int save (Glib::ustring fname, Glib::ustring fname2 = "", ParamsEdited* pedited=NULL) const;
|
||||||
/**
|
/**
|
||||||
* Loads the parameters from a file.
|
* Loads the parameters from a file.
|
||||||
* @param fname the name of the file
|
* @param fname the name of the file
|
||||||
|
* @params pedited pointer to a ParamsEdited object (optional) to store which values has been loaded
|
||||||
* @return Error code (=0 if no error)
|
* @return Error code (=0 if no error)
|
||||||
*/
|
*/
|
||||||
int load (Glib::ustring fname);
|
int load (Glib::ustring fname, ParamsEdited* pedited=NULL);
|
||||||
|
|
||||||
/** Creates a new instance of ProcParams.
|
/** Creates a new instance of ProcParams.
|
||||||
* @return a pointer to the new ProcParams instance. */
|
* @return a pointer to the new ProcParams instance. */
|
||||||
@ -603,6 +594,32 @@ class ProcParams {
|
|||||||
int write (Glib::ustring &fname, Glib::ustring &content) const;
|
int write (Glib::ustring &fname, Glib::ustring &content) const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class associate a ProcParams object and a ParamEdited object through a pointer
|
||||||
|
* to instance of each type in order to handle partial pp3 file loading (and later maybe
|
||||||
|
* saving too)
|
||||||
|
*
|
||||||
|
* PartialProfile is not responsible of ProcParams and ParamsEdited object creation
|
||||||
|
* and hence is not responsible of their destructions. The function that instanciate
|
||||||
|
* PartialProfile object has to handle all this itself.
|
||||||
|
*/
|
||||||
|
class PartialProfile {
|
||||||
|
public:
|
||||||
|
rtengine::procparams::ProcParams* pparams;
|
||||||
|
ParamsEdited* pedited;
|
||||||
|
PartialProfile& operator=(PartialProfile& rhs) { pparams=rhs.pparams; pedited=rhs.pedited; return *this; };
|
||||||
|
|
||||||
|
PartialProfile (bool createInstance=false);
|
||||||
|
PartialProfile (ProcParams* pp, ParamsEdited* pe=NULL, bool fullCopy=false);
|
||||||
|
PartialProfile (const ProcParams* pp, const ParamsEdited* pe=NULL);
|
||||||
|
void deleteInstance ();
|
||||||
|
void clearGeneral ();
|
||||||
|
int load (Glib::ustring fName);
|
||||||
|
void set (bool v);
|
||||||
|
void applyTo (ProcParams *destParams) const ;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -58,7 +58,7 @@ namespace rtengine {
|
|||||||
virtual bool hasIPTC () const =0;
|
virtual bool hasIPTC () const =0;
|
||||||
/** Returns the directory of IPTC tags.
|
/** Returns the directory of IPTC tags.
|
||||||
* @return The directory of IPTC tags */
|
* @return The directory of IPTC tags */
|
||||||
virtual const std::vector<procparams::IPTCPair> getIPTCData () const =0;
|
virtual const procparams::IPTCPairs getIPTCData () const =0;
|
||||||
/** @return a struct containing the date and time of the image */
|
/** @return a struct containing the date and time of the image */
|
||||||
virtual struct tm getDateTime () const =0;
|
virtual struct tm getDateTime () const =0;
|
||||||
/** @return a timestamp containing the date and time of the image */
|
/** @return a timestamp containing the date and time of the image */
|
||||||
|
@ -3,8 +3,17 @@ add_library (rtexif rtexif.cc stdattribs.cc nikonattribs.cc canonattribs.cc
|
|||||||
|
|
||||||
IF (WIN32)
|
IF (WIN32)
|
||||||
set_target_properties (rtexif PROPERTIES COMPILE_FLAGS " -ffast-math -fexpensive-optimizations")
|
set_target_properties (rtexif PROPERTIES COMPILE_FLAGS " -ffast-math -fexpensive-optimizations")
|
||||||
|
include_directories (${EXTRA_INCDIR} ${GLIB2_INCLUDE_DIRS} ${GLIBMM_INCLUDE_DIRS}
|
||||||
|
${GTK_INCLUDE_DIRS} ${GTKMM_INCLUDE_DIRS})
|
||||||
|
link_directories (. ../rtexif ${EXTRA_LIBDIR} ${GLIB2_LIBRARY_DIRS} ${GLIBMM_LIBRARY_DIRS}
|
||||||
|
${GTK_LIBRARY_DIRS} ${GTKMM_LIBRARY_DIRS})
|
||||||
|
#set_target_properties (rth PROPERTIES LINK_FLAGS "-mwindows")
|
||||||
ELSE (WIN32)
|
ELSE (WIN32)
|
||||||
set_target_properties (rtexif PROPERTIES COMPILE_FLAGS " -ffast-math -fexpensive-optimizations -fPIC")
|
set_target_properties (rtexif PROPERTIES COMPILE_FLAGS " -ffast-math -fexpensive-optimizations -fPIC")
|
||||||
|
include_directories (${EXTRA_INCDIR} ${GLIB2_INCLUDE_DIRS}
|
||||||
|
${GLIBMM_INCLUDE_DIRS} ${GTK_INCLUDE_DIRS} ${GTKMM_INCLUDE_DIRS})
|
||||||
|
link_directories (${EXTRA_LIBDIR} ${GLIB2_LIBRARY_DIRS}
|
||||||
|
${GLIBMM_LIBRARY_DIRS} ${GTK_LIBRARY_DIRS} ${GTKMM_LIBRARY_DIRS})
|
||||||
ENDIF (WIN32)
|
ENDIF (WIN32)
|
||||||
|
|
||||||
IF (BUILD_SHARED_LIBS)
|
IF (BUILD_SHARED_LIBS)
|
||||||
|
@ -1404,7 +1404,7 @@ const std::vector<Tag*>& ExifManager::getDefaultTIFFTags (TagDirectory* forthis)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int ExifManager::createJPEGMarker (const TagDirectory* root, const std::vector< std::pair<std::string,std::string> >& changeList, int W, int H, unsigned char* buffer) {
|
int ExifManager::createJPEGMarker (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, unsigned char* buffer) {
|
||||||
|
|
||||||
// write tiff header
|
// write tiff header
|
||||||
int offs = 6;
|
int offs = 6;
|
||||||
@ -1423,8 +1423,8 @@ int ExifManager::createJPEGMarker (const TagDirectory* root, const std::vector<
|
|||||||
else
|
else
|
||||||
cl = new TagDirectory (NULL, ifdAttribs, INTEL);
|
cl = new TagDirectory (NULL, ifdAttribs, INTEL);
|
||||||
|
|
||||||
for (int i=0; i<changeList.size(); i++)
|
for (rtengine::procparams::ExifPairs::const_iterator i=changeList.begin(); i!=changeList.end(); i++)
|
||||||
cl->applyChange (changeList[i].first, changeList[i].second);
|
cl->applyChange (i->first, i->second);
|
||||||
|
|
||||||
getDefaultTIFFTags (cl);
|
getDefaultTIFFTags (cl);
|
||||||
|
|
||||||
@ -1442,7 +1442,7 @@ int ExifManager::createJPEGMarker (const TagDirectory* root, const std::vector<
|
|||||||
return size + 6;
|
return size + 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ExifManager::createTIFFHeader (const TagDirectory* root, const std::vector< std::pair<std::string,std::string> >& changeList, int W, int H, int bps, const char* profiledata, int profilelen, const char* iptcdata, int iptclen, unsigned char* buffer) {
|
int ExifManager::createTIFFHeader (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, int bps, const char* profiledata, int profilelen, const char* iptcdata, int iptclen, unsigned char* buffer) {
|
||||||
|
|
||||||
// write tiff header
|
// write tiff header
|
||||||
int offs = 0;
|
int offs = 0;
|
||||||
@ -1489,8 +1489,8 @@ int ExifManager::createTIFFHeader (const TagDirectory* root, const std::vector<
|
|||||||
}
|
}
|
||||||
|
|
||||||
// apply list of changes
|
// apply list of changes
|
||||||
for (int i=0; i<changeList.size(); i++)
|
for (rtengine::procparams::ExifPairs::const_iterator i=changeList.begin(); i!=changeList.end(); i++)
|
||||||
cl->applyChange (changeList[i].first, changeList[i].second);
|
cl->applyChange (i->first, i->second);
|
||||||
|
|
||||||
// append default properties
|
// append default properties
|
||||||
getDefaultTIFFTags (cl);
|
getDefaultTIFFTags (cl);
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include "../rtengine/procparams.h"
|
||||||
|
|
||||||
namespace rtexif {
|
namespace rtexif {
|
||||||
|
|
||||||
@ -203,8 +204,8 @@ class ExifManager {
|
|||||||
static void parseCIFF (FILE* f, int base, int length, TagDirectory* root);
|
static void parseCIFF (FILE* f, int base, int length, TagDirectory* root);
|
||||||
|
|
||||||
static const std::vector<Tag*>& getDefaultTIFFTags (TagDirectory* forthis);
|
static const std::vector<Tag*>& getDefaultTIFFTags (TagDirectory* forthis);
|
||||||
static int createJPEGMarker (const TagDirectory* root, const std::vector< std::pair<std::string,std::string> >& changeList, int W, int H, unsigned char* buffer);
|
static int createJPEGMarker (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, unsigned char* buffer);
|
||||||
static int createTIFFHeader (const TagDirectory* root, const std::vector< std::pair<std::string,std::string> >& changeList, int W, int H, int bps, const char* profiledata, int profilelen, const char* iptcdata, int iptclen, unsigned char* buffer);
|
static int createTIFFHeader (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, int bps, const char* profiledata, int profilelen, const char* iptcdata, int iptclen, unsigned char* buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
class Interpreter {
|
class Interpreter {
|
||||||
|
@ -45,8 +45,6 @@ else (WIN32)
|
|||||||
${GTK_LIBRARY_DIRS} ${GTKMM_LIBRARY_DIRS} ${GIO_LIBRARY_DIRS} ${GIOMM_LIBRARY_DIRS} ${IPTCDATA_LIBRARY_DIRS} ${LCMS_LIBRARY_DIRS} ${GTHREAD_LIBRARY_DIRS} ${GOBJECT_LIBRARY_DIRS})
|
${GTK_LIBRARY_DIRS} ${GTKMM_LIBRARY_DIRS} ${GIO_LIBRARY_DIRS} ${GIOMM_LIBRARY_DIRS} ${IPTCDATA_LIBRARY_DIRS} ${LCMS_LIBRARY_DIRS} ${GTHREAD_LIBRARY_DIRS} ${GOBJECT_LIBRARY_DIRS})
|
||||||
endif (WIN32)
|
endif (WIN32)
|
||||||
# create config.h which defines where data are stored
|
# create config.h which defines where data are stored
|
||||||
message (STATUS --- CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
message (STATUS --- CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h)
|
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h)
|
||||||
|
|
||||||
add_executable (rth ${EXTRA_SRC} ${BASESOURCEFILES})
|
add_executable (rth ${EXTRA_SRC} ${BASESOURCEFILES})
|
||||||
|
@ -77,7 +77,7 @@ void BatchToolPanelCoordinator::closeSession (bool save) {
|
|||||||
for (unsigned int j=0; j<toolPanels.size(); j++)
|
for (unsigned int j=0; j<toolPanels.size(); j++)
|
||||||
toolPanels[j]->trimValues (&newParams);
|
toolPanels[j]->trimValues (&newParams);
|
||||||
|
|
||||||
selected[i]->setProcParams (newParams, BATCHEDITOR, true);
|
selected[i]->setProcParams (newParams, NULL, BATCHEDITOR, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i=0; i<paramcListeners.size(); i++)
|
for (int i=0; i<paramcListeners.size(); i++)
|
||||||
@ -95,6 +95,7 @@ void BatchToolPanelCoordinator::initSession () {
|
|||||||
selected[i]->addThumbnailListener (this);
|
selected[i]->addThumbnailListener (this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare all the ProcParams and describe which parameters has different (i.e. inconsistent) values in pparamsEdited
|
||||||
pparamsEdited.initFrom (initialPP);
|
pparamsEdited.initFrom (initialPP);
|
||||||
|
|
||||||
crop->setDimensions (100000, 100000);
|
crop->setDimensions (100000, 100000);
|
||||||
@ -188,7 +189,7 @@ void BatchToolPanelCoordinator::initSession () {
|
|||||||
if (options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]) pparams.sharpenMicro.uniformity = 0;
|
if (options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]) pparams.sharpenMicro.uniformity = 0;
|
||||||
|
|
||||||
if (options.baBehav[ADDSET_CHMIXER]) for (int i=0; i<3; i++) pparams.chmixer.red[i] = pparams.chmixer.green[i] = pparams.chmixer.blue[i] = 0;
|
if (options.baBehav[ADDSET_CHMIXER]) for (int i=0; i<3; i++) pparams.chmixer.red[i] = pparams.chmixer.green[i] = pparams.chmixer.blue[i] = 0;
|
||||||
if (options.baBehav[ADDSET_LD_EDGETOLERANCE]) pparams.lumaDenoise.edgetolerance = 0;
|
//if (options.baBehav[ADDSET_LD_EDGETOLERANCE]) pparams.lumaDenoise.edgetolerance = 0;
|
||||||
|
|
||||||
if (options.baBehav[ADDSET_WB_TEMPERATURE]) pparams.wb.temperature = 0;
|
if (options.baBehav[ADDSET_WB_TEMPERATURE]) pparams.wb.temperature = 0;
|
||||||
if (options.baBehav[ADDSET_WB_GREEN]) pparams.wb.green = 0;
|
if (options.baBehav[ADDSET_WB_GREEN]) pparams.wb.green = 0;
|
||||||
@ -199,10 +200,10 @@ void BatchToolPanelCoordinator::initSession () {
|
|||||||
if (options.baBehav[ADDSET_FREE_OUPUT_GAMMA]) pparams.icm.gampos = 0;
|
if (options.baBehav[ADDSET_FREE_OUPUT_GAMMA]) pparams.icm.gampos = 0;
|
||||||
if (options.baBehav[ADDSET_FREE_OUTPUT_SLOPE]) pparams.icm.slpos = 0;
|
if (options.baBehav[ADDSET_FREE_OUTPUT_SLOPE]) pparams.icm.slpos = 0;
|
||||||
|
|
||||||
if (options.baBehav[ADDSET_CBOOST_AMOUNT]) pparams.colorBoost.amount = 0;
|
//if (options.baBehav[ADDSET_CBOOST_AMOUNT]) pparams.colorBoost.amount = 0;
|
||||||
|
|
||||||
if (options.baBehav[ADDSET_CS_BLUEYELLOW]) pparams.colorShift.a = 0;
|
//if (options.baBehav[ADDSET_CS_BLUEYELLOW]) pparams.colorShift.a = 0;
|
||||||
if (options.baBehav[ADDSET_CS_GREENMAGENTA]) pparams.colorShift.b = 0;
|
//if (options.baBehav[ADDSET_CS_GREENMAGENTA]) pparams.colorShift.b = 0;
|
||||||
|
|
||||||
if (options.baBehav[ADDSET_ROTATE_DEGREE]) pparams.rotate.degree = 0;
|
if (options.baBehav[ADDSET_ROTATE_DEGREE]) pparams.rotate.degree = 0;
|
||||||
if (options.baBehav[ADDSET_DIST_AMOUNT]) pparams.distortion.amount = 0;
|
if (options.baBehav[ADDSET_DIST_AMOUNT]) pparams.distortion.amount = 0;
|
||||||
@ -228,6 +229,7 @@ void BatchToolPanelCoordinator::initSession () {
|
|||||||
toolPanels[i]->read (&pparams, &pparamsEdited);
|
toolPanels[i]->read (&pparams, &pparamsEdited);
|
||||||
}
|
}
|
||||||
for (int i=0; i<paramcListeners.size(); i++)
|
for (int i=0; i<paramcListeners.size(); i++)
|
||||||
|
// send this initial state to the History
|
||||||
paramcListeners[i]->procParamsChanged (&pparams, rtengine::EvPhotoLoaded, M("BATCH_PROCESSING"), &pparamsEdited);
|
paramcListeners[i]->procParamsChanged (&pparams, rtengine::EvPhotoLoaded, M("BATCH_PROCESSING"), &pparamsEdited);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -271,7 +273,7 @@ void BatchToolPanelCoordinator::panelChanged (rtengine::ProcEvent event, const G
|
|||||||
for (unsigned int j=0; j<toolPanels.size(); j++)
|
for (unsigned int j=0; j<toolPanels.size(); j++)
|
||||||
toolPanels[j]->trimValues (&newParams);
|
toolPanels[j]->trimValues (&newParams);
|
||||||
|
|
||||||
selected[i]->setProcParams (newParams, BATCHEDITOR, false);
|
selected[i]->setProcParams (newParams, NULL, BATCHEDITOR, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i<paramcListeners.size(); i++)
|
for (int i=0; i<paramcListeners.size(); i++)
|
||||||
@ -304,13 +306,26 @@ void BatchToolPanelCoordinator::procParamsChanged (Thumbnail* thm, int whoChange
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BatchToolPanelCoordinator::profileChange (const ProcParams *nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited) {
|
/*
|
||||||
|
* WARNING: profileChange is actually called by the History only.
|
||||||
|
* Using aProfile panel in the batch tool panel editor is actually
|
||||||
|
* not supported by BatchToolPanelCoordinator::profileChange!
|
||||||
|
*/
|
||||||
|
void BatchToolPanelCoordinator::profileChange (const rtengine::procparams::PartialProfile* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited) {
|
||||||
|
|
||||||
pparams = *nparams;
|
if (event==rtengine::EvProfileChanged) {
|
||||||
|
// a profile has been selected in a hypothetical Profile panel
|
||||||
|
// -> ACTUALLY NOT SUPPORTED
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pparams = *(nparams->pparams);
|
||||||
if (paramsEdited)
|
if (paramsEdited)
|
||||||
pparamsEdited = *paramsEdited;
|
pparamsEdited = *paramsEdited;
|
||||||
|
|
||||||
|
|
||||||
for (int i=0; i<toolPanels.size(); i++)
|
for (int i=0; i<toolPanels.size(); i++)
|
||||||
|
// writing the values to the GUI
|
||||||
toolPanels[i]->read (&pparams, &pparamsEdited);
|
toolPanels[i]->read (&pparams, &pparamsEdited);
|
||||||
|
|
||||||
somethingChanged = true;
|
somethingChanged = true;
|
||||||
@ -319,12 +334,12 @@ void BatchToolPanelCoordinator::profileChange (const ProcParams *nparams, rteng
|
|||||||
for (int i=0; i<toolPanels.size(); i++)
|
for (int i=0; i<toolPanels.size(); i++)
|
||||||
toolPanels[i]->write (&pparams, &pparamsEdited);
|
toolPanels[i]->write (&pparams, &pparamsEdited);
|
||||||
|
|
||||||
// combine with initial parameters and set
|
// combine with initial parameters of each image and set
|
||||||
ProcParams newParams;
|
ProcParams newParams;
|
||||||
for (int i=0; i<selected.size(); i++) {
|
for (int i=0; i<selected.size(); i++) {
|
||||||
newParams = initialPP[i];
|
newParams = initialPP[i];
|
||||||
pparamsEdited.combine (newParams, pparams, true);
|
pparamsEdited.combine (newParams, pparams, true);
|
||||||
selected[i]->setProcParams (newParams, BATCHEDITOR, false);
|
selected[i]->setProcParams (newParams, NULL, BATCHEDITOR, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i<paramcListeners.size(); i++)
|
for (int i=0; i<paramcListeners.size(); i++)
|
||||||
|
@ -55,7 +55,7 @@ class BatchToolPanelCoordinator :
|
|||||||
void panelChanged (rtengine::ProcEvent event, const Glib::ustring& descr);
|
void panelChanged (rtengine::ProcEvent event, const Glib::ustring& descr);
|
||||||
|
|
||||||
// profilechangelistener interface
|
// profilechangelistener interface
|
||||||
void profileChange (const rtengine::procparams::ProcParams* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited=NULL);
|
void profileChange (const rtengine::procparams::PartialProfile* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited=NULL);
|
||||||
|
|
||||||
// wbprovider interface
|
// wbprovider interface
|
||||||
void getAutoWB (double& temp, double& green);
|
void getAutoWB (double& temp, double& green);
|
||||||
|
@ -19,3 +19,51 @@
|
|||||||
#include "clipboard.h"
|
#include "clipboard.h"
|
||||||
|
|
||||||
Clipboard clipboard;
|
Clipboard clipboard;
|
||||||
|
|
||||||
|
Clipboard::Clipboard () : partProfile (false) {}
|
||||||
|
|
||||||
|
Clipboard::~Clipboard () {
|
||||||
|
partProfile.deleteInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* set both the "pparams" and "pedited" field of the PartialProfile; each one can be NULL
|
||||||
|
*/
|
||||||
|
void Clipboard::setPartialProfile (const rtengine::procparams::PartialProfile& pprofile) {
|
||||||
|
if (pprofile.pparams) {
|
||||||
|
if (!partProfile.pparams) partProfile.pparams = new rtengine::procparams::ProcParams();
|
||||||
|
*partProfile.pparams = *pprofile.pparams;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (partProfile.pparams) {
|
||||||
|
delete partProfile.pparams;
|
||||||
|
partProfile.pparams = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pprofile.pedited) {
|
||||||
|
if (!partProfile.pedited) partProfile.pedited = new ParamsEdited();
|
||||||
|
*partProfile.pedited = *pprofile.pedited;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (partProfile.pedited) {
|
||||||
|
delete partProfile.pedited;
|
||||||
|
partProfile.pedited = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* this method copy the procparams to "pparams" and delete "pedited"
|
||||||
|
*/
|
||||||
|
void Clipboard::setProcParams (const rtengine::procparams::ProcParams& pparams) {
|
||||||
|
// copy procparams
|
||||||
|
if (!partProfile.pparams) partProfile.pparams = new rtengine::procparams::ProcParams();
|
||||||
|
*partProfile.pparams = pparams;
|
||||||
|
|
||||||
|
// delete pedited
|
||||||
|
if (partProfile.pedited) {
|
||||||
|
delete partProfile.pedited;
|
||||||
|
partProfile.pedited = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -21,31 +21,37 @@
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "../rtengine/rtengine.h"
|
#include "../rtengine/rtengine.h"
|
||||||
|
#include "../rtengine/procparams.h"
|
||||||
|
#include "paramsedited.h"
|
||||||
#include "mydiagonalcurve.h"
|
#include "mydiagonalcurve.h"
|
||||||
|
|
||||||
class Clipboard {
|
class Clipboard {
|
||||||
|
|
||||||
bool _hasIPTC;
|
bool _hasIPTC;
|
||||||
std::vector<rtengine::procparams::IPTCPair> iptc;
|
rtengine::procparams::IPTCPairs iptc;
|
||||||
bool _hasProcParams;
|
rtengine::procparams::PartialProfile partProfile;
|
||||||
rtengine::procparams::ProcParams procParams;
|
|
||||||
DiagonalCurveType hasCurveDataType;
|
DiagonalCurveType hasCurveDataType;
|
||||||
std::vector<double> curve;
|
std::vector<double> curve;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void setIPTC (const std::vector<rtengine::procparams::IPTCPair>& iptcc) { iptc = iptcc; _hasIPTC = true;}
|
void setIPTC (const rtengine::procparams::IPTCPairs& iptcc) { iptc = iptcc; _hasIPTC = true;}
|
||||||
const std::vector<rtengine::procparams::IPTCPair>& getIPTC () { return iptc; }
|
const rtengine::procparams::IPTCPairs& getIPTC () { return iptc; }
|
||||||
bool hasIPTC () { return _hasIPTC; }
|
bool hasIPTC () { return _hasIPTC; }
|
||||||
|
|
||||||
void setProcParams (const rtengine::procparams::ProcParams& pparams) { procParams = pparams; _hasProcParams = true; }
|
void setPartialProfile (const rtengine::procparams::PartialProfile& pprofile);
|
||||||
const rtengine::procparams::ProcParams& getProcParams () { return procParams; }
|
const rtengine::procparams::PartialProfile& getPartialProfile () { return partProfile; };
|
||||||
bool hasProcParams () { return _hasProcParams; }
|
void setProcParams (const rtengine::procparams::ProcParams& pparams);
|
||||||
|
const rtengine::procparams::ProcParams& getProcParams () { return *partProfile.pparams; }
|
||||||
|
bool hasProcParams () { return partProfile.pparams; }
|
||||||
|
bool hasPEdited () { return partProfile.pedited; }
|
||||||
|
|
||||||
void setCurveData (std::vector<double>& p, DiagonalCurveType type ) { curve = p; hasCurveDataType = type; return; }
|
void setCurveData (std::vector<double>& p, DiagonalCurveType type ) { curve = p; hasCurveDataType = type; return; }
|
||||||
const std::vector<double> & getCurveData () { return curve; }
|
const std::vector<double> & getCurveData () { return curve; }
|
||||||
DiagonalCurveType hasCurveData () { return hasCurveDataType; }
|
DiagonalCurveType hasCurveData () { return hasCurveDataType; }
|
||||||
|
|
||||||
|
Clipboard ();
|
||||||
|
~Clipboard ();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -479,7 +479,7 @@ void EditorPanel::saveProfile () {
|
|||||||
ipc->getParams (¶ms);
|
ipc->getParams (¶ms);
|
||||||
|
|
||||||
// Will call updateCache, which will update both the cached and sidecar files if necessary
|
// Will call updateCache, which will update both the cached and sidecar files if necessary
|
||||||
openThm->setProcParams (params, EDITOR);
|
openThm->setProcParams (params, NULL, EDITOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -592,7 +592,7 @@ void EditorPanel::refreshProcessingState (bool inProcessingP) {
|
|||||||
if (ipc && openThm && tpc->getChangedState()) {
|
if (ipc && openThm && tpc->getChangedState()) {
|
||||||
rtengine::procparams::ProcParams pparams;
|
rtengine::procparams::ProcParams pparams;
|
||||||
ipc->getParams (&pparams);
|
ipc->getParams (&pparams);
|
||||||
openThm->setProcParams (pparams, EDITOR, false);
|
openThm->setProcParams (pparams, NULL, EDITOR, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ring a sound if it was a long event
|
// Ring a sound if it was a long event
|
||||||
@ -908,8 +908,13 @@ bool EditorPanel::handleShortcutKey (GdkEventKey* event) {
|
|||||||
|
|
||||||
void EditorPanel::procParamsChanged (Thumbnail* thm, int whoChangedIt) {
|
void EditorPanel::procParamsChanged (Thumbnail* thm, int whoChangedIt) {
|
||||||
|
|
||||||
if (whoChangedIt!=EDITOR)
|
if (whoChangedIt!=EDITOR) {
|
||||||
tpc->profileChange (&openThm->getProcParams(), rtengine::EvProfileChangeNotification, M("PROGRESSDLG_PROFILECHANGEDINBROWSER"));
|
PartialProfile pp(true);
|
||||||
|
pp.set(true);
|
||||||
|
*(pp.pparams) = openThm->getProcParams();
|
||||||
|
tpc->profileChange (&pp, rtengine::EvProfileChangeNotification, M("PROGRESSDLG_PROFILECHANGEDINBROWSER"));
|
||||||
|
pp.deleteInstance();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EditorPanel::idle_saveImage (ProgressConnector<rtengine::IImage16*> *pc, Glib::ustring fname, SaveFormat sf) {
|
bool EditorPanel::idle_saveImage (ProgressConnector<rtengine::IImage16*> *pc, Glib::ustring fname, SaveFormat sf) {
|
||||||
|
@ -515,24 +515,12 @@ void ExifPanel::updateChangeList (Gtk::TreeModel::Children root, std::string pre
|
|||||||
|
|
||||||
Gtk::TreeModel::iterator iter;
|
Gtk::TreeModel::iterator iter;
|
||||||
for (iter = root.begin(); iter!=root.end(); iter++) {
|
for (iter = root.begin(); iter!=root.end(); iter++) {
|
||||||
if (iter->get_value (exifColumns.edited) == true) {
|
if (iter->get_value (exifColumns.edited) == true)
|
||||||
ExifPair ec;
|
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = iter->get_value (exifColumns.value_nopango);
|
||||||
ec.field = prefix + iter->get_value (exifColumns.field_nopango);
|
else if (iter->get_value (exifColumns.action) == WRITE && iter->get_value (exifColumns.icon) == delicon)
|
||||||
ec.value = iter->get_value (exifColumns.value_nopango);
|
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = "#delete";
|
||||||
changeList.push_back (ec);
|
else if (iter->get_value (exifColumns.action) == DONTWRITE && iter->get_value (exifColumns.icon) == keepicon)
|
||||||
}
|
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = "#keep";
|
||||||
else if (iter->get_value (exifColumns.action) == WRITE && iter->get_value (exifColumns.icon) == delicon) {
|
|
||||||
ExifPair ec;
|
|
||||||
ec.field = prefix + iter->get_value (exifColumns.field_nopango);
|
|
||||||
ec.value = "#delete";
|
|
||||||
changeList.push_back (ec);
|
|
||||||
}
|
|
||||||
else if (iter->get_value (exifColumns.action) == DONTWRITE && iter->get_value (exifColumns.icon) == keepicon) {
|
|
||||||
ExifPair ec;
|
|
||||||
ec.field = prefix + iter->get_value (exifColumns.field_nopango);
|
|
||||||
ec.value = "#keep";
|
|
||||||
changeList.push_back (ec);
|
|
||||||
}
|
|
||||||
if (iter->get_value (exifColumns.icon) == keepicon)
|
if (iter->get_value (exifColumns.icon) == keepicon)
|
||||||
updateChangeList (iter->children(), prefix + iter->get_value (exifColumns.field_nopango));
|
updateChangeList (iter->children(), prefix + iter->get_value (exifColumns.field_nopango));
|
||||||
}
|
}
|
||||||
@ -546,8 +534,8 @@ void ExifPanel::updateChangeList () {
|
|||||||
|
|
||||||
void ExifPanel::applyChangeList () {
|
void ExifPanel::applyChangeList () {
|
||||||
|
|
||||||
for (int i=0; i<changeList.size(); i++)
|
for (rtengine::procparams::ExifPairs::iterator i=changeList.begin(); i!=changeList.end(); i++)
|
||||||
editTag (exifTreeModel->children(), changeList[i].field, changeList[i].value);
|
editTag (exifTreeModel->children(), i->first, i->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExifPanel::row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column) {
|
void ExifPanel::row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column) {
|
||||||
|
@ -28,8 +28,8 @@ class ExifPanel : public Gtk::VBox, public ToolPanel {
|
|||||||
const rtengine::ImageMetaData* idata;
|
const rtengine::ImageMetaData* idata;
|
||||||
int fullw, fullh, cx, cy, cw, ch;
|
int fullw, fullh, cx, cy, cw, ch;
|
||||||
bool crenabled;
|
bool crenabled;
|
||||||
std::vector<rtengine::procparams::ExifPair> changeList;
|
rtengine::procparams::ExifPairs changeList;
|
||||||
std::vector<rtengine::procparams::ExifPair> defChangeList;
|
rtengine::procparams::ExifPairs defChangeList;
|
||||||
bool recursiveOp;
|
bool recursiveOp;
|
||||||
|
|
||||||
class ExifColumns : public Gtk::TreeModelColumnRecord {
|
class ExifColumns : public Gtk::TreeModelColumnRecord {
|
||||||
|
@ -50,8 +50,8 @@ ExportPanel::ExportPanel () : listener (NULL) {
|
|||||||
bypass_sharpening = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SHARPENING")));
|
bypass_sharpening = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SHARPENING")));
|
||||||
bypass_sharpenEdge = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SHARPENEDGE")));
|
bypass_sharpenEdge = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SHARPENEDGE")));
|
||||||
bypass_sharpenMicro = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SHARPENMICRO")));
|
bypass_sharpenMicro = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SHARPENMICRO")));
|
||||||
bypass_lumaDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_LUMADENOISE")));
|
//bypass_lumaDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_LUMADENOISE")));
|
||||||
bypass_colorDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_COLORDENOISE")));
|
//bypass_colorDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_COLORDENOISE")));
|
||||||
bypass_defringe = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_DEFRINGE")));
|
bypass_defringe = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_DEFRINGE")));
|
||||||
bypass_dirpyrDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_DIRPYRDENOISE")));
|
bypass_dirpyrDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_DIRPYRDENOISE")));
|
||||||
bypass_sh_hq = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SH_HQ")));
|
bypass_sh_hq = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SH_HQ")));
|
||||||
@ -162,8 +162,8 @@ ExportPanel::ExportPanel () : listener (NULL) {
|
|||||||
bypass_sharpeningConn = bypass_sharpening->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
bypass_sharpeningConn = bypass_sharpening->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
bypass_sharpenEdgeConn = bypass_sharpenEdge->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
bypass_sharpenEdgeConn = bypass_sharpenEdge->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
bypass_sharpenMicroConn = bypass_sharpenMicro->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
bypass_sharpenMicroConn = bypass_sharpenMicro->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
bypass_lumaDenoiseConn = bypass_lumaDenoise->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
//bypass_lumaDenoiseConn = bypass_lumaDenoise->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
bypass_colorDenoiseConn = bypass_colorDenoise->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
//bypass_colorDenoiseConn = bypass_colorDenoise->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
bypass_defringeConn = bypass_defringe->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
bypass_defringeConn = bypass_defringe->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
bypass_dirpyrDenoiseConn = bypass_dirpyrDenoise->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
bypass_dirpyrDenoiseConn = bypass_dirpyrDenoise->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
bypass_sh_hqConn = bypass_sh_hq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
bypass_sh_hqConn = bypass_sh_hq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
@ -201,8 +201,8 @@ void ExportPanel::SaveSettingsAsDefault(){
|
|||||||
options.fastexport_bypass_sharpening = bypass_sharpening->get_active ();
|
options.fastexport_bypass_sharpening = bypass_sharpening->get_active ();
|
||||||
options.fastexport_bypass_sharpenEdge = bypass_sharpenEdge->get_active ();
|
options.fastexport_bypass_sharpenEdge = bypass_sharpenEdge->get_active ();
|
||||||
options.fastexport_bypass_sharpenMicro = bypass_sharpenMicro->get_active ();
|
options.fastexport_bypass_sharpenMicro = bypass_sharpenMicro->get_active ();
|
||||||
options.fastexport_bypass_lumaDenoise = bypass_lumaDenoise->get_active ();
|
//options.fastexport_bypass_lumaDenoise = bypass_lumaDenoise->get_active ();
|
||||||
options.fastexport_bypass_colorDenoise = bypass_colorDenoise->get_active ();
|
//options.fastexport_bypass_colorDenoise = bypass_colorDenoise->get_active ();
|
||||||
options.fastexport_bypass_defringe = bypass_defringe->get_active ();
|
options.fastexport_bypass_defringe = bypass_defringe->get_active ();
|
||||||
options.fastexport_bypass_dirpyrDenoise = bypass_dirpyrDenoise->get_active ();
|
options.fastexport_bypass_dirpyrDenoise = bypass_dirpyrDenoise->get_active ();
|
||||||
options.fastexport_bypass_sh_hq = bypass_sh_hq->get_active ();
|
options.fastexport_bypass_sh_hq = bypass_sh_hq->get_active ();
|
||||||
@ -254,8 +254,8 @@ void ExportPanel::LoadDefaultSettings(){
|
|||||||
bypass_sharpening->set_active (options.fastexport_bypass_sharpening );
|
bypass_sharpening->set_active (options.fastexport_bypass_sharpening );
|
||||||
bypass_sharpenEdge->set_active (options.fastexport_bypass_sharpenEdge );
|
bypass_sharpenEdge->set_active (options.fastexport_bypass_sharpenEdge );
|
||||||
bypass_sharpenMicro->set_active (options.fastexport_bypass_sharpenMicro );
|
bypass_sharpenMicro->set_active (options.fastexport_bypass_sharpenMicro );
|
||||||
bypass_lumaDenoise->set_active (options.fastexport_bypass_lumaDenoise );
|
//bypass_lumaDenoise->set_active (options.fastexport_bypass_lumaDenoise );
|
||||||
bypass_colorDenoise->set_active (options.fastexport_bypass_colorDenoise );
|
//bypass_colorDenoise->set_active (options.fastexport_bypass_colorDenoise );
|
||||||
bypass_defringe->set_active (options.fastexport_bypass_defringe );
|
bypass_defringe->set_active (options.fastexport_bypass_defringe );
|
||||||
bypass_dirpyrDenoise->set_active (options.fastexport_bypass_dirpyrDenoise );
|
bypass_dirpyrDenoise->set_active (options.fastexport_bypass_dirpyrDenoise );
|
||||||
bypass_sh_hq->set_active (options.fastexport_bypass_sh_hq );
|
bypass_sh_hq->set_active (options.fastexport_bypass_sh_hq );
|
||||||
@ -323,8 +323,8 @@ void ExportPanel::bypassALL_Toggled(){
|
|||||||
bypass_sharpeningConn.block (true);
|
bypass_sharpeningConn.block (true);
|
||||||
bypass_sharpenEdgeConn.block (true);
|
bypass_sharpenEdgeConn.block (true);
|
||||||
bypass_sharpenMicroConn.block (true);
|
bypass_sharpenMicroConn.block (true);
|
||||||
bypass_lumaDenoiseConn.block (true);
|
//bypass_lumaDenoiseConn.block (true);
|
||||||
bypass_colorDenoiseConn.block (true);
|
//bypass_colorDenoiseConn.block (true);
|
||||||
bypass_defringeConn.block (true);
|
bypass_defringeConn.block (true);
|
||||||
bypass_dirpyrDenoiseConn.block (true);
|
bypass_dirpyrDenoiseConn.block (true);
|
||||||
bypass_sh_hqConn.block (true);
|
bypass_sh_hqConn.block (true);
|
||||||
@ -344,8 +344,8 @@ void ExportPanel::bypassALL_Toggled(){
|
|||||||
bypass_sharpening->set_active(bypass_ALL->get_active());
|
bypass_sharpening->set_active(bypass_ALL->get_active());
|
||||||
bypass_sharpenEdge->set_active(bypass_ALL->get_active());
|
bypass_sharpenEdge->set_active(bypass_ALL->get_active());
|
||||||
bypass_sharpenMicro->set_active(bypass_ALL->get_active());
|
bypass_sharpenMicro->set_active(bypass_ALL->get_active());
|
||||||
bypass_lumaDenoise->set_active(bypass_ALL->get_active());
|
//bypass_lumaDenoise->set_active(bypass_ALL->get_active());
|
||||||
bypass_colorDenoise->set_active(bypass_ALL->get_active());
|
//bypass_colorDenoise->set_active(bypass_ALL->get_active());
|
||||||
bypass_defringe->set_active(bypass_ALL->get_active());
|
bypass_defringe->set_active(bypass_ALL->get_active());
|
||||||
bypass_dirpyrDenoise->set_active(bypass_ALL->get_active());
|
bypass_dirpyrDenoise->set_active(bypass_ALL->get_active());
|
||||||
bypass_sh_hq->set_active(bypass_ALL->get_active());
|
bypass_sh_hq->set_active(bypass_ALL->get_active());
|
||||||
@ -363,8 +363,8 @@ void ExportPanel::bypassALL_Toggled(){
|
|||||||
bypass_sharpeningConn.block (false);
|
bypass_sharpeningConn.block (false);
|
||||||
bypass_sharpenEdgeConn.block (false);
|
bypass_sharpenEdgeConn.block (false);
|
||||||
bypass_sharpenMicroConn.block (false);
|
bypass_sharpenMicroConn.block (false);
|
||||||
bypass_lumaDenoiseConn.block (false);
|
//bypass_lumaDenoiseConn.block (false);
|
||||||
bypass_colorDenoiseConn.block (false);
|
//bypass_colorDenoiseConn.block (false);
|
||||||
bypass_defringeConn.block (false);
|
bypass_defringeConn.block (false);
|
||||||
bypass_dirpyrDenoiseConn.block (false);
|
bypass_dirpyrDenoiseConn.block (false);
|
||||||
bypass_sh_hqConn.block (false);
|
bypass_sh_hqConn.block (false);
|
||||||
|
@ -39,8 +39,8 @@ class ExportPanel : public Gtk::VBox {
|
|||||||
Gtk::CheckButton* bypass_sharpenEdge;
|
Gtk::CheckButton* bypass_sharpenEdge;
|
||||||
Gtk::CheckButton* bypass_sharpenMicro;
|
Gtk::CheckButton* bypass_sharpenMicro;
|
||||||
Gtk::CheckButton* bypass_sharpening;
|
Gtk::CheckButton* bypass_sharpening;
|
||||||
Gtk::CheckButton* bypass_lumaDenoise;
|
//Gtk::CheckButton* bypass_lumaDenoise;
|
||||||
Gtk::CheckButton* bypass_colorDenoise;
|
//Gtk::CheckButton* bypass_colorDenoise;
|
||||||
Gtk::CheckButton* bypass_defringe;
|
Gtk::CheckButton* bypass_defringe;
|
||||||
Gtk::CheckButton* bypass_dirpyrDenoise;
|
Gtk::CheckButton* bypass_dirpyrDenoise;
|
||||||
Gtk::CheckButton* bypass_sh_hq;
|
Gtk::CheckButton* bypass_sh_hq;
|
||||||
@ -77,8 +77,8 @@ class ExportPanel : public Gtk::VBox {
|
|||||||
sigc::connection bypass_sharpeningConn ;
|
sigc::connection bypass_sharpeningConn ;
|
||||||
sigc::connection bypass_sharpenEdgeConn ;
|
sigc::connection bypass_sharpenEdgeConn ;
|
||||||
sigc::connection bypass_sharpenMicroConn ;
|
sigc::connection bypass_sharpenMicroConn ;
|
||||||
sigc::connection bypass_lumaDenoiseConn ;
|
//sigc::connection bypass_lumaDenoiseConn ;
|
||||||
sigc::connection bypass_colorDenoiseConn ;
|
//sigc::connection bypass_colorDenoiseConn ;
|
||||||
sigc::connection bypass_defringeConn ;
|
sigc::connection bypass_defringeConn ;
|
||||||
sigc::connection bypass_dirpyrDenoiseConn ;
|
sigc::connection bypass_dirpyrDenoiseConn ;
|
||||||
sigc::connection bypass_sh_hqConn ;
|
sigc::connection bypass_sh_hqConn ;
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
extern Options options;
|
extern Options options;
|
||||||
|
|
||||||
FileBrowser::FileBrowser ()
|
FileBrowser::FileBrowser ()
|
||||||
: tbl(NULL),numFiltered(0) {
|
: tbl(NULL),numFiltered(0), partialPasteDlg(M("PARTIALPASTE_DIALOGLABEL")) {
|
||||||
|
|
||||||
fbih = new FileBrowserIdleHelper;
|
fbih = new FileBrowserIdleHelper;
|
||||||
fbih->fbrowser = this;
|
fbih->fbrowser = this;
|
||||||
@ -514,7 +514,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) {
|
|||||||
rtengine::procparams::ProcParams pp=mselected[i]->thumbnail->getProcParams();
|
rtengine::procparams::ProcParams pp=mselected[i]->thumbnail->getProcParams();
|
||||||
pp.raw.df_autoselect= true;
|
pp.raw.df_autoselect= true;
|
||||||
pp.raw.dark_frame.clear();
|
pp.raw.dark_frame.clear();
|
||||||
mselected[i]->thumbnail->setProcParams(pp,FILEBROWSER,false);
|
mselected[i]->thumbnail->setProcParams(pp,NULL,FILEBROWSER,false);
|
||||||
}
|
}
|
||||||
}else if (m==selectDF){
|
}else if (m==selectDF){
|
||||||
if( !mselected.empty() ){
|
if( !mselected.empty() ){
|
||||||
@ -531,7 +531,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) {
|
|||||||
rtengine::procparams::ProcParams pp=mselected[i]->thumbnail->getProcParams();
|
rtengine::procparams::ProcParams pp=mselected[i]->thumbnail->getProcParams();
|
||||||
pp.raw.dark_frame= fc.get_filename();
|
pp.raw.dark_frame= fc.get_filename();
|
||||||
pp.raw.df_autoselect= false;
|
pp.raw.df_autoselect= false;
|
||||||
mselected[i]->thumbnail->setProcParams(pp,FILEBROWSER,false);
|
mselected[i]->thumbnail->setProcParams(pp,NULL,FILEBROWSER,false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -553,7 +553,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) {
|
|||||||
rtengine::procparams::ProcParams pp=mselected[i]->thumbnail->getProcParams();
|
rtengine::procparams::ProcParams pp=mselected[i]->thumbnail->getProcParams();
|
||||||
pp.raw.ff_AutoSelect= true;
|
pp.raw.ff_AutoSelect= true;
|
||||||
pp.raw.ff_file.clear();
|
pp.raw.ff_file.clear();
|
||||||
mselected[i]->thumbnail->setProcParams(pp,FILEBROWSER,false);
|
mselected[i]->thumbnail->setProcParams(pp,NULL,FILEBROWSER,false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m==selectFF){
|
else if (m==selectFF){
|
||||||
@ -571,7 +571,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) {
|
|||||||
rtengine::procparams::ProcParams pp=mselected[i]->thumbnail->getProcParams();
|
rtengine::procparams::ProcParams pp=mselected[i]->thumbnail->getProcParams();
|
||||||
pp.raw.ff_file= fc.get_filename();
|
pp.raw.ff_file= fc.get_filename();
|
||||||
pp.raw.ff_AutoSelect= false;
|
pp.raw.ff_AutoSelect= false;
|
||||||
mselected[i]->thumbnail->setProcParams(pp,FILEBROWSER,false);
|
mselected[i]->thumbnail->setProcParams(pp,NULL,FILEBROWSER,false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -605,7 +605,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) {
|
|||||||
|
|
||||||
// Empty run to update the thumb
|
// Empty run to update the thumb
|
||||||
rtengine::procparams::ProcParams params = mselected[i]->thumbnail->getProcParams ();
|
rtengine::procparams::ProcParams params = mselected[i]->thumbnail->getProcParams ();
|
||||||
mselected[i]->thumbnail->setProcParams (params, FILEBROWSER);
|
mselected[i]->thumbnail->setProcParams (params, NULL, FILEBROWSER);
|
||||||
}
|
}
|
||||||
} else if (m==clearFromCache) {
|
} else if (m==clearFromCache) {
|
||||||
for (int i=0; i<mselected.size(); i++)
|
for (int i=0; i<mselected.size(); i++)
|
||||||
@ -627,40 +627,60 @@ void FileBrowser::copyProfile () {
|
|||||||
|
|
||||||
void FileBrowser::pasteProfile () {
|
void FileBrowser::pasteProfile () {
|
||||||
|
|
||||||
|
if (clipboard.hasProcParams()) {
|
||||||
std::vector<FileBrowserEntry*> mselected;
|
std::vector<FileBrowserEntry*> mselected;
|
||||||
for (int i=0; i<selected.size(); i++)
|
for (unsigned int i=0; i<selected.size(); i++)
|
||||||
mselected.push_back (static_cast<FileBrowserEntry*>(selected[i]));
|
mselected.push_back (static_cast<FileBrowserEntry*>(selected[i]));
|
||||||
|
|
||||||
if (!tbl || mselected.empty())
|
if (!tbl || mselected.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (int i=0; i<mselected.size(); i++)
|
for (unsigned int i=0; i<mselected.size(); i++) {
|
||||||
mselected[i]->thumbnail->setProcParams (clipboard.getProcParams(), FILEBROWSER);
|
// copying read only clipboard PartialProfile to a temporary one
|
||||||
|
rtengine::procparams::PartialProfile cbPartProf = clipboard.getPartialProfile();
|
||||||
|
rtengine::procparams::PartialProfile pastedPartProf(cbPartProf.pparams, cbPartProf.pedited, true);
|
||||||
|
|
||||||
|
// applying the PartialProfile to the thumb's ProcParams
|
||||||
|
mselected[i]->thumbnail->setProcParams (*pastedPartProf.pparams, pastedPartProf.pedited, FILEBROWSER);
|
||||||
|
pastedPartProf.deleteInstance();
|
||||||
|
}
|
||||||
|
|
||||||
queue_draw ();
|
queue_draw ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileBrowser::partPasteProfile () {
|
void FileBrowser::partPasteProfile () {
|
||||||
|
|
||||||
|
if (clipboard.hasProcParams()) {
|
||||||
|
|
||||||
std::vector<FileBrowserEntry*> mselected;
|
std::vector<FileBrowserEntry*> mselected;
|
||||||
for (int i=0; i<selected.size(); i++)
|
for (unsigned int i=0; i<selected.size(); i++)
|
||||||
mselected.push_back (static_cast<FileBrowserEntry*>(selected[i]));
|
mselected.push_back (static_cast<FileBrowserEntry*>(selected[i]));
|
||||||
|
|
||||||
if (!tbl || mselected.empty())
|
if (!tbl || mselected.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (partialPasteDlg.run ()) {
|
int i = partialPasteDlg.run ();
|
||||||
|
if (i == Gtk::RESPONSE_OK) {
|
||||||
|
|
||||||
for (int i=0; i<mselected.size(); i++) {
|
for (unsigned int i=0; i<mselected.size(); i++) {
|
||||||
|
// copying read only clipboard PartialProfile to a temporary one, initialized to the thumb's ProcParams
|
||||||
mselected[i]->thumbnail->createProcParamsForUpdate(false,false); // this can execute customprofilebuilder to generate param file
|
mselected[i]->thumbnail->createProcParamsForUpdate(false,false); // this can execute customprofilebuilder to generate param file
|
||||||
rtengine::procparams::ProcParams params = mselected[i]->thumbnail->getProcParams ();
|
rtengine::procparams::PartialProfile cbPartProf = clipboard.getPartialProfile();
|
||||||
partialPasteDlg.applyPaste (¶ms, &clipboard.getProcParams());
|
rtengine::procparams::PartialProfile pastedPartProf(&mselected[i]->thumbnail->getProcParams (), NULL);
|
||||||
mselected[i]->thumbnail->setProcParams (params, FILEBROWSER);
|
|
||||||
|
// pushing the selected values of the clipboard PartialProfile to the temporary PartialProfile
|
||||||
|
partialPasteDlg.applyPaste (pastedPartProf.pparams, pastedPartProf.pedited, cbPartProf.pparams, cbPartProf.pedited);
|
||||||
|
|
||||||
|
// applying the temporary PartialProfile to the thumb's ProcParams
|
||||||
|
mselected[i]->thumbnail->setProcParams (*pastedPartProf.pparams, pastedPartProf.pedited, FILEBROWSER);
|
||||||
|
pastedPartProf.deleteInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
queue_draw ();
|
queue_draw ();
|
||||||
}
|
}
|
||||||
partialPasteDlg.hide ();
|
partialPasteDlg.hide ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileBrowser::openDefaultViewer (int destination) {
|
void FileBrowser::openDefaultViewer (int destination) {
|
||||||
@ -726,10 +746,10 @@ bool FileBrowser::keyPressed (GdkEventKey* event) {
|
|||||||
|
|
||||||
void FileBrowser::applyMenuItemActivated (Glib::ustring ppname) {
|
void FileBrowser::applyMenuItemActivated (Glib::ustring ppname) {
|
||||||
|
|
||||||
rtengine::procparams::ProcParams* pparams = profileStore.getProfile (ppname);
|
rtengine::procparams::PartialProfile* partProfile = profileStore.getProfile (ppname);
|
||||||
if (pparams && !selected.empty()) {
|
if (partProfile->pparams && !selected.empty()) {
|
||||||
for (int i=0; i<selected.size(); i++)
|
for (int i=0; i<selected.size(); i++)
|
||||||
(static_cast<FileBrowserEntry*>(selected[i]))->thumbnail->setProcParams (*pparams, FILEBROWSER);
|
(static_cast<FileBrowserEntry*>(selected[i]))->thumbnail->setProcParams (*partProfile->pparams, partProfile->pedited, FILEBROWSER);
|
||||||
queue_draw ();
|
queue_draw ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -739,17 +759,20 @@ void FileBrowser::applyPartialMenuItemActivated (Glib::ustring ppname) {
|
|||||||
if (!tbl || selected.empty())
|
if (!tbl || selected.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rtengine::procparams::ProcParams* pparams = profileStore.getProfile (ppname);
|
rtengine::procparams::PartialProfile* srcProfiles = profileStore.getProfile (ppname);
|
||||||
|
|
||||||
if (pparams) {
|
if (srcProfiles->pparams) {
|
||||||
if (partialPasteDlg.run ()) {
|
if (partialPasteDlg.run()==Gtk::RESPONSE_OK) {
|
||||||
|
|
||||||
for (int i=0; i<selected.size(); i++) {
|
for (int i=0; i<selected.size(); i++) {
|
||||||
selected[i]->thumbnail->createProcParamsForUpdate(false, false); // this can execute customprofilebuilder to generate param file
|
selected[i]->thumbnail->createProcParamsForUpdate(false, false); // this can execute customprofilebuilder to generate param file
|
||||||
|
|
||||||
rtengine::procparams::ProcParams params = (static_cast<FileBrowserEntry*>(selected[i]))->thumbnail->getProcParams ();
|
rtengine::procparams::PartialProfile dstProfile(true);
|
||||||
partialPasteDlg.applyPaste (¶ms, pparams);
|
*dstProfile.pparams = (static_cast<FileBrowserEntry*>(selected[i]))->thumbnail->getProcParams ();
|
||||||
(static_cast<FileBrowserEntry*>(selected[i]))->thumbnail->setProcParams (params, FILEBROWSER);
|
dstProfile.set(true);
|
||||||
|
partialPasteDlg.applyPaste (dstProfile.pparams, dstProfile.pedited, srcProfiles->pparams, srcProfiles->pedited);
|
||||||
|
(static_cast<FileBrowserEntry*>(selected[i]))->thumbnail->setProcParams (*dstProfile.pparams, dstProfile.pedited, FILEBROWSER);
|
||||||
|
dstProfile.deleteInstance();
|
||||||
}
|
}
|
||||||
queue_draw ();
|
queue_draw ();
|
||||||
}
|
}
|
||||||
|
@ -102,8 +102,8 @@ class FileBrowser : public ThumbBrowserBase,
|
|||||||
|
|
||||||
FileBrowserListener* tbl;
|
FileBrowserListener* tbl;
|
||||||
BrowserFilter filter;
|
BrowserFilter filter;
|
||||||
PartialPasteDlg partialPasteDlg;
|
|
||||||
int numFiltered;
|
int numFiltered;
|
||||||
|
PartialPasteDlg partialPasteDlg;
|
||||||
FileBrowserIdleHelper* fbih;
|
FileBrowserIdleHelper* fbih;
|
||||||
|
|
||||||
void toTrashRequested (std::vector<FileBrowserEntry*> tbe);
|
void toTrashRequested (std::vector<FileBrowserEntry*> tbe);
|
||||||
|
@ -867,8 +867,8 @@ void FileCatalog::developRequested (std::vector<FileBrowserEntry*> tbe, bool fas
|
|||||||
if (options.fastexport_bypass_sharpening ) params.sharpening.enabled = false;
|
if (options.fastexport_bypass_sharpening ) params.sharpening.enabled = false;
|
||||||
if (options.fastexport_bypass_sharpenEdge ) params.sharpenEdge.enabled = false;
|
if (options.fastexport_bypass_sharpenEdge ) params.sharpenEdge.enabled = false;
|
||||||
if (options.fastexport_bypass_sharpenMicro ) params.sharpenMicro.enabled = false;
|
if (options.fastexport_bypass_sharpenMicro ) params.sharpenMicro.enabled = false;
|
||||||
if (options.fastexport_bypass_lumaDenoise ) params.lumaDenoise.enabled = false;
|
//if (options.fastexport_bypass_lumaDenoise ) params.lumaDenoise.enabled = false;
|
||||||
if (options.fastexport_bypass_colorDenoise ) params.colorDenoise.enabled = false;
|
//if (options.fastexport_bypass_colorDenoise ) params.colorDenoise.enabled = false;
|
||||||
if (options.fastexport_bypass_defringe ) params.defringe.enabled = false;
|
if (options.fastexport_bypass_defringe ) params.defringe.enabled = false;
|
||||||
if (options.fastexport_bypass_dirpyrDenoise ) params.dirpyrDenoise.enabled = false;
|
if (options.fastexport_bypass_dirpyrDenoise ) params.dirpyrDenoise.enabled = false;
|
||||||
if (options.fastexport_bypass_sh_hq ) params.sh.hq = false;
|
if (options.fastexport_bypass_sh_hq ) params.sh.hq = false;
|
||||||
|
@ -144,9 +144,12 @@ void History::historySelectionChanged () {
|
|||||||
if (row)
|
if (row)
|
||||||
bTreeView->get_selection()->unselect_all ();
|
bTreeView->get_selection()->unselect_all ();
|
||||||
if (row && tpc) {
|
if (row && tpc) {
|
||||||
ProcParams params = row[historyColumns.params];
|
ProcParams pparams = row[historyColumns.params];
|
||||||
|
ParamsEdited pe;
|
||||||
|
pe.set(true);
|
||||||
|
PartialProfile pp(&pparams, &pe);
|
||||||
ParamsEdited paramsEdited = row[historyColumns.paramsEdited];
|
ParamsEdited paramsEdited = row[historyColumns.paramsEdited];
|
||||||
tpc->profileChange (¶ms, EvHistoryBrowsed, row[historyColumns.text], ¶msEdited);
|
tpc->profileChange (&pp, EvHistoryBrowsed, row[historyColumns.text], ¶msEdited);
|
||||||
}
|
}
|
||||||
if (blistener && blistenerLock==false) {
|
if (blistener && blistenerLock==false) {
|
||||||
Gtk::TreeModel::Path path = historyModel->get_path (iter);
|
Gtk::TreeModel::Path path = historyModel->get_path (iter);
|
||||||
@ -167,9 +170,12 @@ void History::bookmarkSelectionChanged () {
|
|||||||
if (row)
|
if (row)
|
||||||
hTreeView->get_selection()->unselect_all ();
|
hTreeView->get_selection()->unselect_all ();
|
||||||
if (row && tpc) {
|
if (row && tpc) {
|
||||||
ProcParams params = row[bookmarkColumns.params];
|
ProcParams pparams = row[bookmarkColumns.params];
|
||||||
|
ParamsEdited pe;
|
||||||
|
pe.set(true);
|
||||||
|
PartialProfile pp(&pparams, &pe);
|
||||||
ParamsEdited paramsEdited = row[bookmarkColumns.paramsEdited];
|
ParamsEdited paramsEdited = row[bookmarkColumns.paramsEdited];
|
||||||
tpc->profileChange (¶ms, EvBookmarkSelected, row[bookmarkColumns.text], ¶msEdited);
|
tpc->profileChange (&pp, EvBookmarkSelected, row[bookmarkColumns.text], ¶msEdited);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -201,7 +207,7 @@ void History::procParamsChanged (ProcParams* params, ProcEvent ev, Glib::ustring
|
|||||||
if (size>0)
|
if (size>0)
|
||||||
row = historyModel->children()[size-1];
|
row = historyModel->children()[size-1];
|
||||||
// if there is no last item or its chev!=ev, create a new one
|
// if there is no last item or its chev!=ev, create a new one
|
||||||
if (size==0 || !row || row[historyColumns.chev]!=ev) {
|
if (size==0 || !row || row[historyColumns.chev]!=ev || ev==EvProfileChanged) {
|
||||||
Gtk::TreeModel::Row newrow = *(historyModel->append());
|
Gtk::TreeModel::Row newrow = *(historyModel->append());
|
||||||
newrow[historyColumns.realText] = eventDescrArray[ev];
|
newrow[historyColumns.realText] = eventDescrArray[ev];
|
||||||
newrow[historyColumns.text] = text;
|
newrow[historyColumns.text] = text;
|
||||||
|
@ -339,6 +339,7 @@ IPTCPanel::IPTCPanel () {
|
|||||||
void IPTCPanel::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
void IPTCPanel::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
||||||
|
|
||||||
disableListener ();
|
disableListener ();
|
||||||
|
changeList.clear();
|
||||||
if (!pp->iptc.empty())
|
if (!pp->iptc.empty())
|
||||||
changeList = pp->iptc;
|
changeList = pp->iptc;
|
||||||
else
|
else
|
||||||
@ -377,7 +378,7 @@ void IPTCPanel::addKeyWord () {
|
|||||||
|
|
||||||
keyword->get_entry()->select_region (0, keyword->get_entry()->get_text().size());
|
keyword->get_entry()->select_region (0, keyword->get_entry()->get_text().size());
|
||||||
|
|
||||||
for (int i=0; i<keywords->size(); i++)
|
for (unsigned int i=0; i<keywords->size(); i++)
|
||||||
if (keywords->get_text (i) == keyword->get_entry()->get_text())
|
if (keywords->get_text (i) == keyword->get_entry()->get_text())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -390,7 +391,7 @@ void IPTCPanel::addKeyWord () {
|
|||||||
items.push_back (s);
|
items.push_back (s);
|
||||||
}
|
}
|
||||||
keyword->clear_items ();
|
keyword->clear_items ();
|
||||||
for (int i=0; i<10 && i<items.size(); i++)
|
for (unsigned int i=0; i<10 && i<items.size(); i++)
|
||||||
keyword->append_text (items[i]);
|
keyword->append_text (items[i]);
|
||||||
keywords->scroll_to_row (keywords->get_model()->get_path(--keywords->get_model()->children().end()));
|
keywords->scroll_to_row (keywords->get_model()->get_path(--keywords->get_model()->children().end()));
|
||||||
|
|
||||||
@ -402,11 +403,11 @@ void IPTCPanel::delKeyWord () {
|
|||||||
std::vector<int> selection = keywords->get_selected ();
|
std::vector<int> selection = keywords->get_selected ();
|
||||||
if (!selection.empty()) {
|
if (!selection.empty()) {
|
||||||
std::vector<Glib::ustring> keep;
|
std::vector<Glib::ustring> keep;
|
||||||
for (int i=0; i<keywords->size(); i++)
|
for (unsigned int i=0; i<keywords->size(); i++)
|
||||||
if (std::find (selection.begin(), selection.end(), i) == selection.end())
|
if (std::find (selection.begin(), selection.end(), i) == selection.end())
|
||||||
keep.push_back (keywords->get_text (i));
|
keep.push_back (keywords->get_text (i));
|
||||||
keywords->clear_items ();
|
keywords->clear_items ();
|
||||||
for (int i=0; i<keep.size(); i++)
|
for (unsigned int i=0; i<keep.size(); i++)
|
||||||
keywords->append_text (keep[i]);
|
keywords->append_text (keep[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -415,7 +416,7 @@ void IPTCPanel::delKeyWord () {
|
|||||||
|
|
||||||
void IPTCPanel::addSuppCategory () {
|
void IPTCPanel::addSuppCategory () {
|
||||||
|
|
||||||
for (int i=0; i<suppCategories->size(); i++)
|
for (unsigned int i=0; i<suppCategories->size(); i++)
|
||||||
if (suppCategories->get_text (i) == suppCategory->get_entry()->get_text())
|
if (suppCategories->get_text (i) == suppCategory->get_entry()->get_text())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -428,7 +429,7 @@ void IPTCPanel::addSuppCategory () {
|
|||||||
items.push_back (s);
|
items.push_back (s);
|
||||||
}
|
}
|
||||||
suppCategory->clear_items ();
|
suppCategory->clear_items ();
|
||||||
for (int i=0; i<10 && i<items.size(); i++)
|
for (unsigned int i=0; i<10 && i<items.size(); i++)
|
||||||
suppCategory->append_text (items[i]);
|
suppCategory->append_text (items[i]);
|
||||||
suppCategories->scroll_to_row (suppCategories->get_model()->get_path(--suppCategories->get_model()->children().end()));
|
suppCategories->scroll_to_row (suppCategories->get_model()->get_path(--suppCategories->get_model()->children().end()));
|
||||||
suppCategory->get_entry()->select_region (0, suppCategory->get_entry()->get_text().size());
|
suppCategory->get_entry()->select_region (0, suppCategory->get_entry()->get_text().size());
|
||||||
@ -441,11 +442,11 @@ void IPTCPanel::delSuppCategory () {
|
|||||||
std::vector<int> selection = suppCategories->get_selected ();
|
std::vector<int> selection = suppCategories->get_selected ();
|
||||||
if (!selection.empty()) {
|
if (!selection.empty()) {
|
||||||
std::vector<Glib::ustring> keep;
|
std::vector<Glib::ustring> keep;
|
||||||
for (int i=0; i<suppCategories->size(); i++)
|
for (unsigned int i=0; i<suppCategories->size(); i++)
|
||||||
if (std::find (selection.begin(), selection.end(), i) == selection.end())
|
if (std::find (selection.begin(), selection.end(), i) == selection.end())
|
||||||
keep.push_back (suppCategories->get_text (i));
|
keep.push_back (suppCategories->get_text (i));
|
||||||
suppCategories->clear_items ();
|
suppCategories->clear_items ();
|
||||||
for (int i=0; i<keep.size(); i++)
|
for (unsigned int i=0; i<keep.size(); i++)
|
||||||
suppCategories->append_text (keep[i]);
|
suppCategories->append_text (keep[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,45 +456,30 @@ void IPTCPanel::delSuppCategory () {
|
|||||||
void IPTCPanel::updateChangeList () {
|
void IPTCPanel::updateChangeList () {
|
||||||
|
|
||||||
changeList.clear ();
|
changeList.clear ();
|
||||||
changeList.resize (18);
|
changeList["Caption" ].push_back (captionText->get_text ());
|
||||||
changeList[0].field = "Caption";
|
changeList["CaptionWriter" ].push_back (captionWriter->get_text ());
|
||||||
changeList[0].values.push_back (captionText->get_text ());
|
changeList["Headline" ].push_back (headline->get_text ());
|
||||||
changeList[1].field = "CaptionWriter";
|
changeList["Instructions" ].push_back (instructions->get_text ());
|
||||||
changeList[1].values.push_back (captionWriter->get_text ());
|
|
||||||
changeList[2].field = "Headline";
|
for (unsigned int i=0; i<keywords->size(); i++)
|
||||||
changeList[2].values.push_back (headline->get_text ());
|
changeList["Keywords" ].push_back (keywords->get_text (i));
|
||||||
changeList[3].field = "Instructions";
|
|
||||||
changeList[3].values.push_back (instructions->get_text ());
|
changeList["Category" ].push_back (category->get_entry()->get_text ());
|
||||||
changeList[4].field = "Keywords";
|
|
||||||
for (int i=0; i<keywords->size(); i++)
|
for (unsigned int i=0; i<suppCategories->size(); i++)
|
||||||
changeList[4].values.push_back (keywords->get_text (i));
|
changeList["SupplementalCategories"].push_back (suppCategories->get_text (i));
|
||||||
changeList[5].field = "Category";
|
|
||||||
changeList[5].values.push_back (category->get_entry()->get_text ());
|
changeList["Author" ].push_back (author->get_text ());
|
||||||
changeList[6].field = "SupplementalCategories";
|
changeList["AuthorsPosition"].push_back (authorPos->get_text ());
|
||||||
for (int i=0; i<suppCategories->size(); i++)
|
changeList["Credit" ].push_back (credit->get_text ());
|
||||||
changeList[6].values.push_back (suppCategories->get_text (i));
|
changeList["Source" ].push_back (source->get_text ());
|
||||||
changeList[7].field = "Author";
|
changeList["Copyright" ].push_back (copyright->get_text ());
|
||||||
changeList[7].values.push_back (author->get_text ());
|
changeList["City" ].push_back (city->get_text ());
|
||||||
changeList[8].field = "AuthorsPosition";
|
changeList["Province" ].push_back (province->get_text ());
|
||||||
changeList[8].values.push_back (authorPos->get_text ());
|
changeList["Country" ].push_back (country->get_text ());
|
||||||
changeList[9].field = "Credit";
|
changeList["Title" ].push_back (title->get_text ());
|
||||||
changeList[9].values.push_back (credit->get_text ());
|
changeList["DateCreated" ].push_back (dateCreated->get_text ());
|
||||||
changeList[10].field = "Source";
|
changeList["TransReference" ].push_back (transReference->get_text ());
|
||||||
changeList[10].values.push_back (source->get_text ());
|
|
||||||
changeList[11].field = "Copyright";
|
|
||||||
changeList[11].values.push_back (copyright->get_text ());
|
|
||||||
changeList[12].field = "City";
|
|
||||||
changeList[12].values.push_back (city->get_text ());
|
|
||||||
changeList[13].field = "Province";
|
|
||||||
changeList[13].values.push_back (province->get_text ());
|
|
||||||
changeList[14].field = "Country";
|
|
||||||
changeList[14].values.push_back (country->get_text ());
|
|
||||||
changeList[15].field = "Title";
|
|
||||||
changeList[15].values.push_back (title->get_text ());
|
|
||||||
changeList[16].field = "DateCreated";
|
|
||||||
changeList[16].values.push_back (dateCreated->get_text ());
|
|
||||||
changeList[17].field = "TransReference";
|
|
||||||
changeList[17].values.push_back (transReference->get_text ());
|
|
||||||
|
|
||||||
notifyListener ();
|
notifyListener ();
|
||||||
}
|
}
|
||||||
@ -524,45 +510,47 @@ void IPTCPanel::applyChangeList () {
|
|||||||
keyword->get_entry()->set_text ("");
|
keyword->get_entry()->set_text ("");
|
||||||
suppCategory->get_entry()->set_text ("");
|
suppCategory->get_entry()->set_text ("");
|
||||||
|
|
||||||
for (int i=0; i<changeList.size(); i++)
|
for (rtengine::procparams::IPTCPairs::iterator i=changeList.begin(); i!=changeList.end(); i++) {
|
||||||
if (changeList[i].field == "Caption" && !changeList[i].values.empty())
|
printf("- %s: %s\n", i->first.c_str(), i->second.empty()?"[vide]":i->second.at(0).c_str());
|
||||||
captionText->set_text (changeList[i].values[0]);
|
if (i->first == "Caption" && !i->second.empty())
|
||||||
else if (changeList[i].field == "CaptionWriter" && !changeList[i].values.empty())
|
captionText->set_text (i->second.at(0));
|
||||||
captionWriter->set_text (changeList[i].values[0]);
|
else if (i->first == "CaptionWriter" && !i->second.empty())
|
||||||
else if (changeList[i].field == "Headline" && !changeList[i].values.empty())
|
captionWriter->set_text (i->second.at(0));
|
||||||
headline->set_text (changeList[i].values[0]);
|
else if (i->first == "Headline" && !i->second.empty())
|
||||||
else if (changeList[i].field == "Instructions" && !changeList[i].values.empty())
|
headline->set_text (i->second.at(0));
|
||||||
instructions->set_text (changeList[i].values[0]);
|
else if (i->first == "Instructions" && !i->second.empty())
|
||||||
else if (changeList[i].field == "Keywords")
|
instructions->set_text (i->second.at(0));
|
||||||
for (int j=0; j<changeList[i].values.size(); j++)
|
else if (i->first == "Keywords")
|
||||||
keywords->append_text (changeList[i].values[j]);
|
for (unsigned int j=0; j<i->second.size(); j++)
|
||||||
else if (changeList[i].field == "Category" && !changeList[i].values.empty())
|
keywords->append_text (i->second.at(j));
|
||||||
category->get_entry()->set_text (changeList[i].values[0]);
|
else if (i->first == "Category" && !i->second.empty())
|
||||||
else if (changeList[i].field == "SupplementalCategories")
|
category->get_entry()->set_text (i->second.at(0));
|
||||||
for (int j=0; j<changeList[i].values.size(); j++)
|
else if (i->first == "SupplementalCategories")
|
||||||
suppCategories->append_text (changeList[i].values[j]);
|
for (unsigned int j=0; j<i->second.size(); j++)
|
||||||
else if (changeList[i].field == "Author" && !changeList[i].values.empty())
|
suppCategories->append_text (i->second.at(j));
|
||||||
author->set_text (changeList[i].values[0]);
|
else if (i->first == "Author" && !i->second.empty())
|
||||||
else if (changeList[i].field == "AuthorsPosition" && !changeList[i].values.empty())
|
author->set_text (i->second.at(0));
|
||||||
authorPos->set_text (changeList[i].values[0]);
|
else if (i->first == "AuthorsPosition" && !i->second.empty())
|
||||||
else if (changeList[i].field == "Credit" && !changeList[i].values.empty())
|
authorPos->set_text (i->second.at(0));
|
||||||
credit->set_text (changeList[i].values[0]);
|
else if (i->first == "Credit" && !i->second.empty())
|
||||||
else if (changeList[i].field == "Source" && !changeList[i].values.empty())
|
credit->set_text (i->second.at(0));
|
||||||
source->set_text (changeList[i].values[0]);
|
else if (i->first == "Source" && !i->second.empty())
|
||||||
else if (changeList[i].field == "Copyright" && !changeList[i].values.empty())
|
source->set_text (i->second.at(0));
|
||||||
copyright->set_text (changeList[i].values[0]);
|
else if (i->first == "Copyright" && !i->second.empty())
|
||||||
else if (changeList[i].field == "City" && !changeList[i].values.empty())
|
copyright->set_text (i->second.at(0));
|
||||||
city->set_text (changeList[i].values[0]);
|
else if (i->first == "City" && !i->second.empty())
|
||||||
else if (changeList[i].field == "Province" && !changeList[i].values.empty())
|
city->set_text (i->second.at(0));
|
||||||
province->set_text (changeList[i].values[0]);
|
else if (i->first == "Province" && !i->second.empty())
|
||||||
else if (changeList[i].field == "Country" && !changeList[i].values.empty())
|
province->set_text (i->second.at(0));
|
||||||
country->set_text (changeList[i].values[0]);
|
else if (i->first == "Country" && !i->second.empty())
|
||||||
else if (changeList[i].field == "Title" && !changeList[i].values.empty())
|
country->set_text (i->second.at(0));
|
||||||
title->set_text (changeList[i].values[0]);
|
else if (i->first == "Title" && !i->second.empty())
|
||||||
else if (changeList[i].field == "DateCreated" && !changeList[i].values.empty())
|
title->set_text (i->second.at(0));
|
||||||
dateCreated->set_text (changeList[i].values[0]);
|
else if (i->first == "DateCreated" && !i->second.empty())
|
||||||
else if (changeList[i].field == "TransReference" && !changeList[i].values.empty())
|
dateCreated->set_text (i->second.at(0));
|
||||||
transReference->set_text (changeList[i].values[0]);
|
else if (i->first == "TransReference" && !i->second.empty())
|
||||||
|
transReference->set_text (i->second.at(0));
|
||||||
|
}
|
||||||
|
|
||||||
for (int i=0; i<16; i++)
|
for (int i=0; i<16; i++)
|
||||||
conns[i].block (false);
|
conns[i].block (false);
|
||||||
|
@ -26,9 +26,9 @@
|
|||||||
class IPTCPanel : public Gtk::VBox, public ToolPanel {
|
class IPTCPanel : public Gtk::VBox, public ToolPanel {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<rtengine::procparams::IPTCPair> changeList;
|
rtengine::procparams::IPTCPairs changeList;
|
||||||
std::vector<rtengine::procparams::IPTCPair> defChangeList;
|
rtengine::procparams::IPTCPairs defChangeList;
|
||||||
std::vector<rtengine::procparams::IPTCPair> embeddedData;
|
rtengine::procparams::IPTCPairs embeddedData;
|
||||||
|
|
||||||
Gtk::TextView* captionView;
|
Gtk::TextView* captionView;
|
||||||
Glib::RefPtr<Gtk::TextBuffer> captionText;
|
Glib::RefPtr<Gtk::TextBuffer> captionText;
|
||||||
|
174
rtgui/main.cc
174
rtgui/main.cc
@ -58,7 +58,8 @@ bool simpleEditor;
|
|||||||
* 1 to start GUI (with a dir or file option)
|
* 1 to start GUI (with a dir or file option)
|
||||||
* 2 to start GUI because no files found
|
* 2 to start GUI because no files found
|
||||||
* -1 if there is an error in parameters
|
* -1 if there is an error in parameters
|
||||||
* -2 if an error occurred during processing */
|
* -2 if an error occurred during processing
|
||||||
|
* -3 if at least one required procparam file was not found */
|
||||||
int processLineParams( int argc, char **argv );
|
int processLineParams( int argc, char **argv );
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
@ -164,24 +165,36 @@ int main(int argc, char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void deleteProcParams(std::vector<rtengine::procparams::PartialProfile*> &pparams) {
|
||||||
|
for (unsigned int i=0; i<pparams.size(); i++) {
|
||||||
|
pparams[i]->deleteInstance();
|
||||||
|
delete pparams[i];
|
||||||
|
pparams[i] = NULL;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int processLineParams( int argc, char **argv )
|
int processLineParams( int argc, char **argv )
|
||||||
{
|
{
|
||||||
|
rtengine::procparams::PartialProfile *rawParams=NULL, *imgParams=NULL;
|
||||||
std::vector<Glib::ustring> inputFiles;
|
std::vector<Glib::ustring> inputFiles;
|
||||||
Glib::ustring outputPath = "";
|
Glib::ustring outputPath = "";
|
||||||
Glib::ustring processingParams = "";
|
std::vector<rtengine::procparams::PartialProfile*> processingParams;
|
||||||
bool isDirectory=false;
|
bool isDirectory=false;
|
||||||
bool outputDirectory=false;
|
bool outputDirectory=false;
|
||||||
bool overwriteFiles=false;
|
bool overwriteFiles=false;
|
||||||
bool sideProcParams=false;
|
bool sideProcParams=false;
|
||||||
bool copyParamsFile=false;
|
bool copyParamsFile=false;
|
||||||
bool useDefaultIfAbsent=true;
|
bool skipIfNoSidecar=false;
|
||||||
|
bool useDefault=false;
|
||||||
|
unsigned int sideCarFilePos = 0;
|
||||||
int compression=100;
|
int compression=100;
|
||||||
int bits=-1;
|
int bits=-1;
|
||||||
std::string outputType = "";
|
std::string outputType = "";
|
||||||
unsigned errors=0;
|
unsigned errors=0;
|
||||||
for( int iArg=1; iArg<argc; iArg++){
|
for( int iArg=1; iArg<argc; iArg++){
|
||||||
if( argv[iArg][0]=='-' ){
|
if( argv[iArg][0]=='-' ){
|
||||||
switch( argv[iArg][1]){
|
switch( argv[iArg][1] ){
|
||||||
case 'O':
|
case 'O':
|
||||||
copyParamsFile = true;
|
copyParamsFile = true;
|
||||||
case 'o': // outputfile or dir
|
case 'o': // outputfile or dir
|
||||||
@ -192,16 +205,35 @@ int processLineParams( int argc, char **argv )
|
|||||||
outputDirectory=true;
|
outputDirectory=true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'p': // processing parameters for all inputs
|
case 'p': // processing parameters for all inputs; all set procparams are required, so
|
||||||
|
// RT stop if any of them can't be loaded for any reason.
|
||||||
if( iArg+1 <argc ){
|
if( iArg+1 <argc ){
|
||||||
iArg++;
|
iArg++;
|
||||||
processingParams = safe_filename_to_utf8 ( argv[iArg] );
|
Glib::ustring fname = safe_filename_to_utf8 ( argv[iArg] );
|
||||||
|
if (fname.at(0) == '-') {
|
||||||
|
std::cerr << "Error: filename missing next to the -p switch" << std::endl;
|
||||||
|
deleteProcParams(processingParams);
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
|
rtengine::procparams::PartialProfile* currentParams = new rtengine::procparams::PartialProfile(true);
|
||||||
|
if (!(currentParams->load ( fname ))) {
|
||||||
|
processingParams.push_back(currentParams);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
std::cerr << "Error: \""<< fname <<"\" not found" << std::endl;
|
||||||
|
deleteProcParams(processingParams);
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'S':
|
case 'S':
|
||||||
useDefaultIfAbsent=false;
|
skipIfNoSidecar=true;
|
||||||
case 's': // Processing params next to file (.pp3 appended)
|
case 's': // Processing params next to file (file extension appended)
|
||||||
sideProcParams = true;
|
sideProcParams = true;
|
||||||
|
sideCarFilePos = processingParams.size();
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
useDefault = true;
|
||||||
break;
|
break;
|
||||||
case 'Y':
|
case 'Y':
|
||||||
overwriteFiles =true;
|
overwriteFiles =true;
|
||||||
@ -232,7 +264,7 @@ int processLineParams( int argc, char **argv )
|
|||||||
safe_build_file_list (dir, names, argv[iArg] );
|
safe_build_file_list (dir, names, argv[iArg] );
|
||||||
for(size_t iFile=0; iFile< names.size(); iFile++ ){
|
for(size_t iFile=0; iFile< names.size(); iFile++ ){
|
||||||
if( !safe_file_test( names[iFile] , Glib::FILE_TEST_IS_DIR)){
|
if( !safe_file_test( names[iFile] , Glib::FILE_TEST_IS_DIR)){
|
||||||
// skip files without extension and pp3 files
|
// skip files without extension and without sidecar files
|
||||||
Glib::ustring s(names[iFile]);
|
Glib::ustring s(names[iFile]);
|
||||||
Glib::ustring::size_type ext= s.find_last_of('.');
|
Glib::ustring::size_type ext= s.find_last_of('.');
|
||||||
if( Glib::ustring::npos == ext )
|
if( Glib::ustring::npos == ext )
|
||||||
@ -250,27 +282,41 @@ int processLineParams( int argc, char **argv )
|
|||||||
case 'h':
|
case 'h':
|
||||||
case '?':
|
case '?':
|
||||||
default:
|
default:
|
||||||
std::cerr << "RawTherapee, " << VERSION << std::endl;
|
{
|
||||||
std::cerr << "Copyright (c)2004-2011 Gabor Horvath <hgabor@rawtherapee.com>"<< std::endl << std::endl;
|
Glib::ustring pparamsExt = paramFileExtension.substr(1);
|
||||||
|
std::cerr << "RawTherapee, V" << VERSION << std::endl;
|
||||||
|
std::cerr << "Copyright (c)2004-2012 Gabor Horvath <hgabor@rawtherapee.com>"<< std::endl << std::endl;
|
||||||
std::cerr << "Usage:"<< std::endl;
|
std::cerr << "Usage:"<< std::endl;
|
||||||
std::cerr << Glib::path_get_basename(argv[0]) << " [<selected dir>] : start RT GUI browser inside dir."<< std::endl;
|
std::cerr << Glib::path_get_basename(argv[0]) << " [<selected dir>] : start RT GUI browser inside dir."<< std::endl;
|
||||||
std::cerr << Glib::path_get_basename(argv[0]) << " <file> : start GUI editor with file."<< std::endl;
|
std::cerr << Glib::path_get_basename(argv[0]) << " <file> : start GUI editor with file."<< std::endl;
|
||||||
std::cerr << Glib::path_get_basename(argv[0]) << " -c <inputDir>|<file list> : convert files in batch with default parameters."<< std::endl<< std::endl;
|
std::cerr << Glib::path_get_basename(argv[0]) << " -c <inputDir>|<file list> : convert files in batch with default parameters."<< std::endl<< std::endl;
|
||||||
std::cerr << "Other options used with -c (that must be last option) "<< std::endl;
|
std::cerr << "Other options used with -c (that must be last option) "<< std::endl;
|
||||||
std::cerr << Glib::path_get_basename(argv[0]) <<" [-o <output> | -O <output>] [-s | -S | -p <file>] [-j[1-100]|-t|-n] -Y -c <input>"<< std::endl;
|
std::cerr << Glib::path_get_basename(argv[0]) <<" [-o <output> | -O <output>] [-s|-S] [-p <file>] [-d] [-j[1-100]|-t|-n] -Y -c <input>"<< std::endl;
|
||||||
std::cerr << " -o <outputFile>|<outputDir> : select output directory."<< std::endl;
|
std::cerr << " -o <outputFile>|<outputDir> : select output directory."<< std::endl;
|
||||||
std::cerr << " -O <outputFile>|<outputDir> : select output dir and copy pp3 file into it"<< std::endl;
|
std::cerr << " -O <outputFile>|<outputDir> : select output dir and copy " << pparamsExt << " file into it"<< std::endl;
|
||||||
std::cerr << " -s : select parameters to be pp3 file next to input file (with same name)"<< std::endl;
|
std::cerr << " -s : include the " << pparamsExt << " file next to the input file (with same name) to build the image's parameters"<< std::endl;
|
||||||
std::cerr << " ex: for IMG001.NEF there should be IMG001.NEF.pp3 in the same dir" << std::endl;
|
std::cerr << " ex: for IMG001.NEF there should be IMG001.NEF." << pparamsExt << " in the same dir" << std::endl;
|
||||||
std::cerr << " if absent use default" << std::endl;
|
std::cerr << " if absent use default" << std::endl;
|
||||||
std::cerr << " -S : like -s but skip if pp3 file not found." << std::endl;
|
std::cerr << " -S : like -s but skip if " << pparamsExt << " file not found." << std::endl;
|
||||||
std::cerr << " -p <file.pp3> : specify pp3 file to be used for all conversions."<< std::endl;
|
std::cerr << " -p <file." << pparamsExt << "> : specify " << pparamsExt << " file to be used for all conversions."<< std::endl;
|
||||||
|
std::cerr << " you can specify as much -p option as you want (see the note below)."<< std::endl;
|
||||||
|
std::cerr << " -d : use the default Raw or Image " << pparamsExt << " file to build the image's parameters"<< std::endl;
|
||||||
std::cerr << " -j[compression] : specify output to be jpeg.(default)"<< std::endl;
|
std::cerr << " -j[compression] : specify output to be jpeg.(default)"<< std::endl;
|
||||||
std::cerr << " -t : specify output to be tif."<< std::endl;
|
std::cerr << " -t : specify output to be uncompressed tiff."<< std::endl;
|
||||||
|
std::cerr << " -t1: specify output to be compressed tiff."<< std::endl;
|
||||||
std::cerr << " -n : specify output to be png."<< std::endl;
|
std::cerr << " -n : specify output to be png."<< std::endl;
|
||||||
std::cerr << " -Y : overwrite output if present."<< std::endl;
|
std::cerr << " -Y : overwrite output if present."<< std::endl<<std::endl;
|
||||||
|
std::cerr << "NOTE: Your " << pparamsExt << " files can be incomplete, RawTherapee will set the values like that:"<< std::endl;
|
||||||
|
std::cerr << " - the " << pparamsExt << " file is built with internal default values;"<< std::endl;
|
||||||
|
std::cerr << " - then overrided by those found in the default Raw or Image " << pparamsExt << " file (if -d has been set);"<< std::endl;
|
||||||
|
std::cerr << " - then overrided by those found in the " << pparamsExt << " files provided by -p,"<< std::endl;
|
||||||
|
std::cerr << " each one overriding the previous values;" << std::endl;
|
||||||
|
std::cerr << " * then overrided by the sidecar file if -s is set and if the file exists;"<< std::endl;
|
||||||
|
std::cerr << " the time where the sidecar file is used depend of the position of the -s switch"<< std::endl;
|
||||||
|
std::cerr << " in the command line regarding to the -p parameters (e.g. \"-p first." << pparamsExt << " -p second." << pparamsExt << " -s -p fourth." << pparamsExt << "\")"<< std::endl;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
argv1 = safe_filename_to_utf8 ( argv[iArg] );
|
argv1 = safe_filename_to_utf8 ( argv[iArg] );
|
||||||
if( outputDirectory ){
|
if( outputDirectory ){
|
||||||
@ -299,17 +345,33 @@ int processLineParams( int argc, char **argv )
|
|||||||
if( inputFiles.empty() )
|
if( inputFiles.empty() )
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
rtengine::procparams::ProcParams params,paramsRaw,paramsImg, *currentParams;
|
if (useDefault) {
|
||||||
if( !sideProcParams ){
|
rawParams = new rtengine::procparams::PartialProfile(true);
|
||||||
if( processingParams.length()>0 )
|
if (rawParams->load(options.profilePath+"/" + options.defProfRaw + paramFileExtension)) {
|
||||||
params.load ( processingParams );
|
std::cerr << "Error: default Raw procparams file \""<< (options.profilePath+"/" + options.defProfRaw + paramFileExtension) << "\" not found" << std::endl;
|
||||||
else{
|
rawParams->deleteInstance();
|
||||||
paramsRaw.load(options.profilePath+"/"+options.defProfRaw+paramFileExtension);
|
delete rawParams;
|
||||||
paramsImg.load(options.profilePath+"/"+options.defProfImg+paramFileExtension);
|
deleteProcParams(processingParams);
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
|
imgParams = new rtengine::procparams::PartialProfile(true);
|
||||||
|
if (imgParams->load(options.profilePath+"/" + options.defProfImg + paramFileExtension)) {
|
||||||
|
std::cerr << "Error: default Image procparams file \""<< (options.profilePath+"/" + options.defProfImg + paramFileExtension) << "\" not found" << std::endl;
|
||||||
|
imgParams->deleteInstance();
|
||||||
|
delete imgParams;
|
||||||
|
rawParams->deleteInstance();
|
||||||
|
delete rawParams;
|
||||||
|
deleteProcParams(processingParams);
|
||||||
|
return -3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ParamsEdited paramsEdited;
|
||||||
for( size_t iFile=0; iFile< inputFiles.size(); iFile++){
|
for( size_t iFile=0; iFile< inputFiles.size(); iFile++){
|
||||||
|
|
||||||
|
// Has to be reinstanciated at each profile to have a ProcParams object with default values
|
||||||
|
rtengine::procparams::ProcParams currentParams;
|
||||||
|
|
||||||
Glib::ustring inputFile = inputFiles[iFile];
|
Glib::ustring inputFile = inputFiles[iFile];
|
||||||
std::cout << "Processing: " << inputFile << std::endl;
|
std::cout << "Processing: " << inputFile << std::endl;
|
||||||
|
|
||||||
@ -354,27 +416,48 @@ int processLineParams( int argc, char **argv )
|
|||||||
std::cerr << "Error loading file: "<< inputFile << std::endl;
|
std::cerr << "Error loading file: "<< inputFile << std::endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if( sideProcParams ){
|
|
||||||
|
if (useDefault) {
|
||||||
|
if (isRaw) {
|
||||||
|
std::cout << " Merging default Raw profile" << std::endl;
|
||||||
|
rawParams->applyTo(¤tParams);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
std::cout << " Merging default Image profile" << std::endl;
|
||||||
|
imgParams->applyTo(¤tParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool sideCarFound = false;
|
||||||
|
unsigned int i=0;
|
||||||
|
// Iterate the procparams file list in order to build the final ProcParams
|
||||||
|
do {
|
||||||
|
if (sideProcParams && i==sideCarFilePos) {
|
||||||
|
// using the sidecar file
|
||||||
Glib::ustring sideProcessingParams = inputFile + paramFileExtension;
|
Glib::ustring sideProcessingParams = inputFile + paramFileExtension;
|
||||||
if( !safe_file_test( sideProcessingParams, Glib::FILE_TEST_EXISTS ) || params.load ( sideProcessingParams )){
|
// the "load" method don't reset the procparams values anymore, so values found in the procparam file override the one of currentParams
|
||||||
if( useDefaultIfAbsent ){
|
if( !safe_file_test( sideProcessingParams, Glib::FILE_TEST_EXISTS ) || currentParams.load ( sideProcessingParams ))
|
||||||
currentParams = isRaw? ¶msRaw: ¶msImg;
|
std::cerr << "Warning: sidecar file requested but not found for: "<< sideProcessingParams << std::endl;
|
||||||
}else{
|
else {
|
||||||
|
sideCarFound = true;
|
||||||
|
std::cout << " Merging sidecar procparams" << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( processingParams.size()>i ) {
|
||||||
|
std::cout << " Merging procparams #" << i << std::endl;
|
||||||
|
processingParams[i]->applyTo(¤tParams);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
} while (i < processingParams.size()+(sideProcParams?1:0));
|
||||||
|
|
||||||
|
if( sideProcParams && !sideCarFound && skipIfNoSidecar ){
|
||||||
delete ii;
|
delete ii;
|
||||||
errors++;
|
errors++;
|
||||||
std::cerr << "Error loading processing params: "<< sideProcessingParams << std::endl;
|
std::cerr << "Error: no sidecar procparams found for: "<< inputFile << std::endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}else
|
|
||||||
currentParams = ¶ms;
|
job = rtengine::ProcessingJob::create (ii, currentParams);
|
||||||
}else if( processingParams.length()>0 ){
|
|
||||||
currentParams = ¶ms;
|
|
||||||
}else if(isRaw ){
|
|
||||||
currentParams = ¶msRaw;
|
|
||||||
}else{
|
|
||||||
currentParams = ¶msImg;
|
|
||||||
}
|
|
||||||
job = rtengine::ProcessingJob::create (ii, *currentParams);
|
|
||||||
if( !job ){
|
if( !job ){
|
||||||
errors++;
|
errors++;
|
||||||
std::cerr << "Error creating processing for: "<< inputFile << std::endl;
|
std::cerr << "Error creating processing for: "<< inputFile << std::endl;
|
||||||
@ -406,12 +489,17 @@ int processLineParams( int argc, char **argv )
|
|||||||
}else{
|
}else{
|
||||||
if( copyParamsFile ){
|
if( copyParamsFile ){
|
||||||
Glib::ustring outputProcessingParams = outputFile + paramFileExtension;
|
Glib::ustring outputProcessingParams = outputFile + paramFileExtension;
|
||||||
currentParams->save( outputProcessingParams );
|
currentParams.save( outputProcessingParams );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ii->decreaseRef();
|
ii->decreaseRef();
|
||||||
resultImage->free();
|
resultImage->free();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (imgParams) { imgParams->deleteInstance(); delete imgParams; }
|
||||||
|
if (rawParams) { rawParams->deleteInstance(); delete rawParams; }
|
||||||
|
deleteProcParams(processingParams);
|
||||||
|
|
||||||
return errors>0?-2:0;
|
return errors>0?-2:0;
|
||||||
}
|
}
|
||||||
|
@ -76,6 +76,7 @@ void Options::setDefaults () {
|
|||||||
startupDir = STARTUPDIR_LAST; // was STARTUPDIR_HOME ; an empty startupPath is now correctly handled (open in the Home dir)
|
startupDir = STARTUPDIR_LAST; // was STARTUPDIR_HOME ; an empty startupPath is now correctly handled (open in the Home dir)
|
||||||
startupPath = "";
|
startupPath = "";
|
||||||
profilePath = "profiles";
|
profilePath = "profiles";
|
||||||
|
loadSaveProfilePath = "";
|
||||||
dirBrowserWidth = 200;
|
dirBrowserWidth = 200;
|
||||||
dirBrowserHeight = 150;
|
dirBrowserHeight = 150;
|
||||||
preferencesWidth = 0;
|
preferencesWidth = 0;
|
||||||
@ -165,8 +166,8 @@ void Options::setDefaults () {
|
|||||||
fastexport_bypass_sharpening = true;
|
fastexport_bypass_sharpening = true;
|
||||||
fastexport_bypass_sharpenEdge = true;
|
fastexport_bypass_sharpenEdge = true;
|
||||||
fastexport_bypass_sharpenMicro = true;
|
fastexport_bypass_sharpenMicro = true;
|
||||||
fastexport_bypass_lumaDenoise = true;
|
//fastexport_bypass_lumaDenoise = true;
|
||||||
fastexport_bypass_colorDenoise = true;
|
//fastexport_bypass_colorDenoise = true;
|
||||||
fastexport_bypass_defringe = true;
|
fastexport_bypass_defringe = true;
|
||||||
fastexport_bypass_dirpyrDenoise = true;
|
fastexport_bypass_dirpyrDenoise = true;
|
||||||
fastexport_bypass_sh_hq = true;
|
fastexport_bypass_sh_hq = true;
|
||||||
@ -211,12 +212,12 @@ void Options::setDefaults () {
|
|||||||
0, // ADDSET_LC_BRIGHTNESS
|
0, // ADDSET_LC_BRIGHTNESS
|
||||||
0, // ADDSET_LC_CONTRAST
|
0, // ADDSET_LC_CONTRAST
|
||||||
0, // ADDSET_SHARP_AMOUNT
|
0, // ADDSET_SHARP_AMOUNT
|
||||||
0, // ADDSET_LD_EDGETOLERANCE
|
//0, // ADDSET_LD_EDGETOLERANCE -- From obsolete and removed tool
|
||||||
0, // ADDSET_WB_TEMPERATURE
|
0, // ADDSET_WB_TEMPERATURE
|
||||||
0, // ADDSET_WB_GREEN
|
0, // ADDSET_WB_GREEN
|
||||||
0, // ADDSET_CBOOST_AMOUNT
|
//0, // ADDSET_CBOOST_AMOUNT -- From obsolete and removed tool
|
||||||
0, // ADDSET_CS_BLUEYELLOW
|
//0, // ADDSET_CS_BLUEYELLOW -- From obsolete and removed tool
|
||||||
0, // ADDSET_CS_GREENMAGENTA
|
//0, // ADDSET_CS_GREENMAGENTA -- From obsolete and removed tool
|
||||||
0, // ADDSET_ROTATE_DEGREE
|
0, // ADDSET_ROTATE_DEGREE
|
||||||
0, // ADDSET_DIST_AMOUNT
|
0, // ADDSET_DIST_AMOUNT
|
||||||
0, // ADDSET_PERSPECTIVE
|
0, // ADDSET_PERSPECTIVE
|
||||||
@ -368,6 +369,7 @@ if (keyFile.has_group ("Output")) {
|
|||||||
|
|
||||||
if (keyFile.has_group ("Profiles")) {
|
if (keyFile.has_group ("Profiles")) {
|
||||||
if (keyFile.has_key ("Profiles", "Directory")) profilePath = keyFile.get_string ("Profiles", "Directory");
|
if (keyFile.has_key ("Profiles", "Directory")) profilePath = keyFile.get_string ("Profiles", "Directory");
|
||||||
|
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", "RawDefault")) defProfRaw = keyFile.get_string ("Profiles", "RawDefault");
|
||||||
if (keyFile.has_key ("Profiles", "ImgDefault")) defProfImg = keyFile.get_string ("Profiles", "ImgDefault");
|
if (keyFile.has_key ("Profiles", "ImgDefault")) defProfImg = keyFile.get_string ("Profiles", "ImgDefault");
|
||||||
if (keyFile.has_key ("Profiles", "SaveParamsWithFile")) saveParamsFile = keyFile.get_boolean ("Profiles", "SaveParamsWithFile");
|
if (keyFile.has_key ("Profiles", "SaveParamsWithFile")) saveParamsFile = keyFile.get_boolean ("Profiles", "SaveParamsWithFile");
|
||||||
@ -494,8 +496,8 @@ if (keyFile.has_group ("Fast Export")) {
|
|||||||
if (keyFile.has_key ("Fast Export", "fastexport_bypass_sharpening" )) fastexport_bypass_sharpening = keyFile.get_boolean ("Fast Export", "fastexport_bypass_sharpening" );
|
if (keyFile.has_key ("Fast Export", "fastexport_bypass_sharpening" )) fastexport_bypass_sharpening = keyFile.get_boolean ("Fast Export", "fastexport_bypass_sharpening" );
|
||||||
if (keyFile.has_key ("Fast Export", "fastexport_bypass_sharpenEdge" )) fastexport_bypass_sharpenEdge = keyFile.get_boolean ("Fast Export", "fastexport_bypass_sharpenEdge" );
|
if (keyFile.has_key ("Fast Export", "fastexport_bypass_sharpenEdge" )) fastexport_bypass_sharpenEdge = keyFile.get_boolean ("Fast Export", "fastexport_bypass_sharpenEdge" );
|
||||||
if (keyFile.has_key ("Fast Export", "fastexport_bypass_sharpenMicro" )) fastexport_bypass_sharpenMicro = keyFile.get_boolean ("Fast Export", "fastexport_bypass_sharpenMicro" );
|
if (keyFile.has_key ("Fast Export", "fastexport_bypass_sharpenMicro" )) fastexport_bypass_sharpenMicro = keyFile.get_boolean ("Fast Export", "fastexport_bypass_sharpenMicro" );
|
||||||
if (keyFile.has_key ("Fast Export", "fastexport_bypass_lumaDenoise" )) fastexport_bypass_lumaDenoise = keyFile.get_boolean ("Fast Export", "fastexport_bypass_lumaDenoise" );
|
//if (keyFile.has_key ("Fast Export", "fastexport_bypass_lumaDenoise" )) fastexport_bypass_lumaDenoise = keyFile.get_boolean ("Fast Export", "fastexport_bypass_lumaDenoise" );
|
||||||
if (keyFile.has_key ("Fast Export", "fastexport_bypass_colorDenoise" )) fastexport_bypass_colorDenoise = keyFile.get_boolean ("Fast Export", "fastexport_bypass_colorDenoise" );
|
//if (keyFile.has_key ("Fast Export", "fastexport_bypass_colorDenoise" )) fastexport_bypass_colorDenoise = keyFile.get_boolean ("Fast Export", "fastexport_bypass_colorDenoise" );
|
||||||
if (keyFile.has_key ("Fast Export", "fastexport_bypass_defringe" )) fastexport_bypass_defringe = keyFile.get_boolean ("Fast Export", "fastexport_bypass_defringe" );
|
if (keyFile.has_key ("Fast Export", "fastexport_bypass_defringe" )) fastexport_bypass_defringe = keyFile.get_boolean ("Fast Export", "fastexport_bypass_defringe" );
|
||||||
if (keyFile.has_key ("Fast Export", "fastexport_bypass_dirpyrDenoise" )) fastexport_bypass_dirpyrDenoise = keyFile.get_boolean ("Fast Export", "fastexport_bypass_dirpyrDenoise" );
|
if (keyFile.has_key ("Fast Export", "fastexport_bypass_dirpyrDenoise" )) fastexport_bypass_dirpyrDenoise = keyFile.get_boolean ("Fast Export", "fastexport_bypass_dirpyrDenoise" );
|
||||||
if (keyFile.has_key ("Fast Export", "fastexport_bypass_sh_hq" )) fastexport_bypass_sh_hq = keyFile.get_boolean ("Fast Export", "fastexport_bypass_sh_hq" );
|
if (keyFile.has_key ("Fast Export", "fastexport_bypass_sh_hq" )) fastexport_bypass_sh_hq = keyFile.get_boolean ("Fast Export", "fastexport_bypass_sh_hq" );
|
||||||
@ -622,6 +624,7 @@ int Options::saveToFile (Glib::ustring fname) {
|
|||||||
keyFile.set_boolean ("Output", "TunnelMetaData", tunnelMetaData);
|
keyFile.set_boolean ("Output", "TunnelMetaData", tunnelMetaData);
|
||||||
|
|
||||||
keyFile.set_string ("Profiles", "Directory", profilePath);
|
keyFile.set_string ("Profiles", "Directory", profilePath);
|
||||||
|
keyFile.set_string ("Profiles", "LoadSaveProfilePath", loadSaveProfilePath);
|
||||||
keyFile.set_string ("Profiles", "RawDefault", defProfRaw);
|
keyFile.set_string ("Profiles", "RawDefault", defProfRaw);
|
||||||
keyFile.set_string ("Profiles", "ImgDefault", defProfImg);
|
keyFile.set_string ("Profiles", "ImgDefault", defProfImg);
|
||||||
keyFile.set_boolean ("Profiles", "SaveParamsWithFile", saveParamsFile);
|
keyFile.set_boolean ("Profiles", "SaveParamsWithFile", saveParamsFile);
|
||||||
@ -700,8 +703,8 @@ int Options::saveToFile (Glib::ustring fname) {
|
|||||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpening" , fastexport_bypass_sharpening );
|
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpening" , fastexport_bypass_sharpening );
|
||||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpenEdge" , fastexport_bypass_sharpenEdge );
|
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpenEdge" , fastexport_bypass_sharpenEdge );
|
||||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpenMicro" , fastexport_bypass_sharpenMicro );
|
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpenMicro" , fastexport_bypass_sharpenMicro );
|
||||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_lumaDenoise" , fastexport_bypass_lumaDenoise );
|
//keyFile.set_boolean ("Fast Export", "fastexport_bypass_lumaDenoise" , fastexport_bypass_lumaDenoise );
|
||||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_colorDenoise" , fastexport_bypass_colorDenoise );
|
//keyFile.set_boolean ("Fast Export", "fastexport_bypass_colorDenoise" , fastexport_bypass_colorDenoise );
|
||||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_defringe" , fastexport_bypass_defringe );
|
keyFile.set_boolean ("Fast Export", "fastexport_bypass_defringe" , fastexport_bypass_defringe );
|
||||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_dirpyrDenoise" , fastexport_bypass_dirpyrDenoise );
|
keyFile.set_boolean ("Fast Export", "fastexport_bypass_dirpyrDenoise" , fastexport_bypass_dirpyrDenoise );
|
||||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sh_hq" , fastexport_bypass_sh_hq );
|
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sh_hq" , fastexport_bypass_sh_hq );
|
||||||
|
@ -61,6 +61,7 @@ class Options {
|
|||||||
int startupDir;
|
int startupDir;
|
||||||
Glib::ustring startupPath;
|
Glib::ustring startupPath;
|
||||||
Glib::ustring profilePath;
|
Glib::ustring profilePath;
|
||||||
|
Glib::ustring loadSaveProfilePath;
|
||||||
Glib::ustring lastSaveAsPath;
|
Glib::ustring lastSaveAsPath;
|
||||||
int saveAsDialogWidth;
|
int saveAsDialogWidth;
|
||||||
int saveAsDialogHeight;
|
int saveAsDialogHeight;
|
||||||
@ -167,8 +168,8 @@ class Options {
|
|||||||
bool fastexport_bypass_sharpening;
|
bool fastexport_bypass_sharpening;
|
||||||
bool fastexport_bypass_sharpenEdge;
|
bool fastexport_bypass_sharpenEdge;
|
||||||
bool fastexport_bypass_sharpenMicro;
|
bool fastexport_bypass_sharpenMicro;
|
||||||
bool fastexport_bypass_lumaDenoise;
|
//bool fastexport_bypass_lumaDenoise;
|
||||||
bool fastexport_bypass_colorDenoise;
|
//bool fastexport_bypass_colorDenoise;
|
||||||
bool fastexport_bypass_defringe;
|
bool fastexport_bypass_defringe;
|
||||||
bool fastexport_bypass_dirpyrDenoise;
|
bool fastexport_bypass_dirpyrDenoise;
|
||||||
bool fastexport_bypass_sh_hq;
|
bool fastexport_bypass_sh_hq;
|
||||||
|
@ -28,6 +28,10 @@ ParamsEdited::ParamsEdited () {
|
|||||||
|
|
||||||
void ParamsEdited::set (bool v) {
|
void ParamsEdited::set (bool v) {
|
||||||
|
|
||||||
|
general.rank = v;
|
||||||
|
general.colorlabel = v;
|
||||||
|
general.intrash = v;
|
||||||
|
|
||||||
toneCurve.curve = v;
|
toneCurve.curve = v;
|
||||||
toneCurve.brightness = v;
|
toneCurve.brightness = v;
|
||||||
toneCurve.black = v;
|
toneCurve.black = v;
|
||||||
@ -80,20 +84,20 @@ void ParamsEdited::set (bool v) {
|
|||||||
vibrance.protectskins = v;
|
vibrance.protectskins = v;
|
||||||
vibrance.avoidcolorshift = v;
|
vibrance.avoidcolorshift = v;
|
||||||
vibrance.pastsattog = v;
|
vibrance.pastsattog = v;
|
||||||
colorBoost.amount = v;
|
//colorBoost.amount = v;
|
||||||
colorBoost.avoidclip = v;
|
//colorBoost.avoidclip = v;
|
||||||
colorBoost.enable_saturationlimiter = v;
|
//colorBoost.enable_saturationlimiter = v;
|
||||||
colorBoost.saturationlimit = v;
|
//colorBoost.saturationlimit = v;
|
||||||
wb.method = v;
|
wb.method = v;
|
||||||
wb.green = v;
|
wb.green = v;
|
||||||
wb.temperature = v;
|
wb.temperature = v;
|
||||||
colorShift.a = v;
|
//colorShift.a = v;
|
||||||
colorShift.b = v;
|
//colorShift.b = v;
|
||||||
lumaDenoise.enabled = v;
|
//lumaDenoise.enabled = v;
|
||||||
lumaDenoise.radius = v;
|
//lumaDenoise.radius = v;
|
||||||
lumaDenoise.edgetolerance = v;
|
//lumaDenoise.edgetolerance = v;
|
||||||
colorDenoise.enabled = v;
|
//colorDenoise.enabled = v;
|
||||||
colorDenoise.amount = v;
|
//colorDenoise.amount = v;
|
||||||
defringe.enabled = v;
|
defringe.enabled = v;
|
||||||
defringe.radius = v;
|
defringe.radius = v;
|
||||||
defringe.threshold = v;
|
defringe.threshold = v;
|
||||||
@ -176,7 +180,8 @@ void ParamsEdited::set (bool v) {
|
|||||||
raw.caBlue = v;
|
raw.caBlue = v;
|
||||||
raw.caRed = v;
|
raw.caRed = v;
|
||||||
raw.greenEq = v;
|
raw.greenEq = v;
|
||||||
raw.hotDeadPixel = v;
|
raw.hotDeadPixelFilter = v;
|
||||||
|
raw.hotDeadPixelThresh = v;
|
||||||
raw.linenoise = v;
|
raw.linenoise = v;
|
||||||
raw.darkFrame = v;
|
raw.darkFrame = v;
|
||||||
raw.dfAuto = v;
|
raw.dfAuto = v;
|
||||||
@ -199,8 +204,8 @@ void ParamsEdited::set (bool v) {
|
|||||||
hsvequalizer.hcurve = v;
|
hsvequalizer.hcurve = v;
|
||||||
hsvequalizer.scurve = v;
|
hsvequalizer.scurve = v;
|
||||||
hsvequalizer.vcurve = v;
|
hsvequalizer.vcurve = v;
|
||||||
exif.clear ();
|
exif = v;
|
||||||
iptc.clear ();
|
iptc = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
using namespace rtengine;
|
using namespace rtengine;
|
||||||
@ -267,20 +272,20 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
|
|||||||
vibrance.protectskins = vibrance.protectskins && p.vibrance.protectskins == other.vibrance.protectskins;
|
vibrance.protectskins = vibrance.protectskins && p.vibrance.protectskins == other.vibrance.protectskins;
|
||||||
vibrance.avoidcolorshift = vibrance.avoidcolorshift && p.vibrance.avoidcolorshift == other.vibrance.avoidcolorshift;
|
vibrance.avoidcolorshift = vibrance.avoidcolorshift && p.vibrance.avoidcolorshift == other.vibrance.avoidcolorshift;
|
||||||
vibrance.pastsattog = vibrance.pastsattog && p.vibrance.pastsattog == other.vibrance.pastsattog;
|
vibrance.pastsattog = vibrance.pastsattog && p.vibrance.pastsattog == other.vibrance.pastsattog;
|
||||||
colorBoost.amount = colorBoost.amount && p.colorBoost.amount == other.colorBoost.amount;
|
//colorBoost.amount = colorBoost.amount && p.colorBoost.amount == other.colorBoost.amount;
|
||||||
colorBoost.avoidclip = colorBoost.avoidclip && p.colorBoost.avoidclip == other.colorBoost.avoidclip;
|
//colorBoost.avoidclip = colorBoost.avoidclip && p.colorBoost.avoidclip == other.colorBoost.avoidclip;
|
||||||
colorBoost.enable_saturationlimiter = colorBoost.enable_saturationlimiter && p.colorBoost.enable_saturationlimiter == other.colorBoost.enable_saturationlimiter;
|
//colorBoost.enable_saturationlimiter = colorBoost.enable_saturationlimiter && p.colorBoost.enable_saturationlimiter == other.colorBoost.enable_saturationlimiter;
|
||||||
colorBoost.saturationlimit = colorBoost.saturationlimit && p.colorBoost.saturationlimit == other.colorBoost.saturationlimit;
|
//colorBoost.saturationlimit = colorBoost.saturationlimit && p.colorBoost.saturationlimit == other.colorBoost.saturationlimit;
|
||||||
wb.method = wb.method && p.wb.method == other.wb.method;
|
wb.method = wb.method && p.wb.method == other.wb.method;
|
||||||
wb.green = wb.green && p.wb.green == other.wb.green;
|
wb.green = wb.green && p.wb.green == other.wb.green;
|
||||||
wb.temperature = wb.temperature && p.wb.temperature == other.wb.temperature;
|
wb.temperature = wb.temperature && p.wb.temperature == other.wb.temperature;
|
||||||
colorShift.a = colorShift.a && p.colorShift.a == other.colorShift.a;
|
//colorShift.a = colorShift.a && p.colorShift.a == other.colorShift.a;
|
||||||
colorShift.b = colorShift.b && p.colorShift.b == other.colorShift.b;
|
//colorShift.b = colorShift.b && p.colorShift.b == other.colorShift.b;
|
||||||
lumaDenoise.enabled = lumaDenoise.enabled && p.lumaDenoise.enabled == other.lumaDenoise.enabled;
|
//lumaDenoise.enabled = lumaDenoise.enabled && p.lumaDenoise.enabled == other.lumaDenoise.enabled;
|
||||||
lumaDenoise.radius = lumaDenoise.radius && p.lumaDenoise.radius == other.lumaDenoise.radius;
|
//lumaDenoise.radius = lumaDenoise.radius && p.lumaDenoise.radius == other.lumaDenoise.radius;
|
||||||
lumaDenoise.edgetolerance = lumaDenoise.edgetolerance && p.lumaDenoise.edgetolerance == other.lumaDenoise.edgetolerance;
|
//lumaDenoise.edgetolerance = lumaDenoise.edgetolerance && p.lumaDenoise.edgetolerance == other.lumaDenoise.edgetolerance;
|
||||||
colorDenoise.enabled = colorDenoise.enabled && p.colorDenoise.enabled == other.colorDenoise.enabled;
|
//colorDenoise.enabled = colorDenoise.enabled && p.colorDenoise.enabled == other.colorDenoise.enabled;
|
||||||
colorDenoise.amount = colorDenoise.amount && p.colorDenoise.amount == other.colorDenoise.amount;
|
//colorDenoise.amount = colorDenoise.amount && p.colorDenoise.amount == other.colorDenoise.amount;
|
||||||
defringe.enabled = defringe.enabled && p.defringe.enabled == other.defringe.enabled;
|
defringe.enabled = defringe.enabled && p.defringe.enabled == other.defringe.enabled;
|
||||||
defringe.radius = defringe.radius && p.defringe.radius == other.defringe.radius;
|
defringe.radius = defringe.radius && p.defringe.radius == other.defringe.radius;
|
||||||
defringe.threshold = defringe.threshold && p.defringe.threshold == other.defringe.threshold;
|
defringe.threshold = defringe.threshold && p.defringe.threshold == other.defringe.threshold;
|
||||||
@ -367,7 +372,8 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
|
|||||||
raw.caRed = raw.caRed && p.raw.cared == other.raw.cared;
|
raw.caRed = raw.caRed && p.raw.cared == other.raw.cared;
|
||||||
raw.caBlue = raw.caBlue && p.raw.cablue == other.raw.cablue;
|
raw.caBlue = raw.caBlue && p.raw.cablue == other.raw.cablue;
|
||||||
raw.greenEq = raw.greenEq && p.raw.greenthresh == other.raw.greenthresh;
|
raw.greenEq = raw.greenEq && p.raw.greenthresh == other.raw.greenthresh;
|
||||||
raw.hotDeadPixel = raw.hotDeadPixel && p.raw.hotdeadpix_filt == other.raw.hotdeadpix_filt;
|
raw.hotDeadPixelFilter = raw.hotDeadPixelFilter && p.raw.hotdeadpix_filt == other.raw.hotdeadpix_filt;
|
||||||
|
raw.hotDeadPixelThresh = raw.hotDeadPixelThresh && p.raw.hotdeadpix_thresh == other.raw.hotdeadpix_thresh;
|
||||||
raw.linenoise = raw.linenoise && p.raw.linenoise == other.raw.linenoise;
|
raw.linenoise = raw.linenoise && p.raw.linenoise == other.raw.linenoise;
|
||||||
raw.darkFrame = raw.darkFrame && p.raw.dark_frame == other.raw.dark_frame;
|
raw.darkFrame = raw.darkFrame && p.raw.dark_frame == other.raw.dark_frame;
|
||||||
raw.dfAuto = raw.dfAuto && p.raw.df_autoselect == other.raw.df_autoselect;
|
raw.dfAuto = raw.dfAuto && p.raw.df_autoselect == other.raw.df_autoselect;
|
||||||
@ -390,6 +396,8 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
|
|||||||
hsvequalizer.hcurve = hsvequalizer.hcurve && p.hsvequalizer.hcurve == other.hsvequalizer.hcurve;
|
hsvequalizer.hcurve = hsvequalizer.hcurve && p.hsvequalizer.hcurve == other.hsvequalizer.hcurve;
|
||||||
hsvequalizer.scurve = hsvequalizer.scurve && p.hsvequalizer.scurve == other.hsvequalizer.scurve;
|
hsvequalizer.scurve = hsvequalizer.scurve && p.hsvequalizer.scurve == other.hsvequalizer.scurve;
|
||||||
hsvequalizer.vcurve = hsvequalizer.vcurve && p.hsvequalizer.vcurve == other.hsvequalizer.vcurve;
|
hsvequalizer.vcurve = hsvequalizer.vcurve && p.hsvequalizer.vcurve == other.hsvequalizer.vcurve;
|
||||||
|
|
||||||
|
// How the hell can we handle that???
|
||||||
// exif = exif && p.exif==other.exif
|
// exif = exif && p.exif==other.exif
|
||||||
// iptc = other.iptc;
|
// iptc = other.iptc;
|
||||||
}
|
}
|
||||||
@ -454,24 +462,20 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
|||||||
if (vibrance.avoidcolorshift) toEdit.vibrance.avoidcolorshift = mods.vibrance.avoidcolorshift;
|
if (vibrance.avoidcolorshift) toEdit.vibrance.avoidcolorshift = mods.vibrance.avoidcolorshift;
|
||||||
if (vibrance.pastsattog) toEdit.vibrance.pastsattog = mods.vibrance.pastsattog;
|
if (vibrance.pastsattog) toEdit.vibrance.pastsattog = mods.vibrance.pastsattog;
|
||||||
|
|
||||||
|
//if (colorBoost.amount) toEdit.colorBoost.amount = dontforceSet && options.baBehav[ADDSET_CBOOST_AMOUNT] ? toEdit.colorBoost.amount + mods.colorBoost.amount : mods.colorBoost.amount;
|
||||||
|
//if (colorBoost.avoidclip) toEdit.colorBoost.avoidclip = mods.colorBoost.avoidclip;
|
||||||
|
//if (colorBoost.enable_saturationlimiter)toEdit.colorBoost.enable_saturationlimiter = mods.colorBoost.enable_saturationlimiter;
|
||||||
|
//if (colorBoost.saturationlimit) toEdit.colorBoost.saturationlimit = mods.colorBoost.saturationlimit;
|
||||||
if (colorBoost.amount) toEdit.colorBoost.amount = dontforceSet && options.baBehav[ADDSET_CBOOST_AMOUNT] ? toEdit.colorBoost.amount + mods.colorBoost.amount : mods.colorBoost.amount;
|
|
||||||
if (colorBoost.avoidclip) toEdit.colorBoost.avoidclip = mods.colorBoost.avoidclip;
|
|
||||||
if (colorBoost.enable_saturationlimiter)toEdit.colorBoost.enable_saturationlimiter = mods.colorBoost.enable_saturationlimiter;
|
|
||||||
if (colorBoost.saturationlimit) toEdit.colorBoost.saturationlimit = mods.colorBoost.saturationlimit;
|
|
||||||
if (wb.method) toEdit.wb.method = mods.wb.method;
|
if (wb.method) toEdit.wb.method = mods.wb.method;
|
||||||
if (wb.green) toEdit.wb.green = dontforceSet && options.baBehav[ADDSET_WB_GREEN] ? toEdit.wb.green + mods.wb.green : mods.wb.green;
|
if (wb.green) toEdit.wb.green = dontforceSet && options.baBehav[ADDSET_WB_GREEN] ? toEdit.wb.green + mods.wb.green : mods.wb.green;
|
||||||
if (wb.temperature) toEdit.wb.temperature = dontforceSet && options.baBehav[ADDSET_WB_TEMPERATURE] ? toEdit.wb.temperature + mods.wb.temperature : mods.wb.temperature;
|
if (wb.temperature) toEdit.wb.temperature = dontforceSet && options.baBehav[ADDSET_WB_TEMPERATURE] ? toEdit.wb.temperature + mods.wb.temperature : mods.wb.temperature;
|
||||||
if (colorShift.a) toEdit.colorShift.a = dontforceSet && options.baBehav[ADDSET_CS_BLUEYELLOW] ? toEdit.colorShift.a + mods.colorShift.a : mods.colorShift.a;
|
//if (colorShift.a) toEdit.colorShift.a = dontforceSet && options.baBehav[ADDSET_CS_BLUEYELLOW] ? toEdit.colorShift.a + mods.colorShift.a : mods.colorShift.a;
|
||||||
if (colorShift.b) toEdit.colorShift.b = dontforceSet && options.baBehav[ADDSET_CS_GREENMAGENTA] ? toEdit.colorShift.b + mods.colorShift.b : mods.colorShift.b;
|
//if (colorShift.b) toEdit.colorShift.b = dontforceSet && options.baBehav[ADDSET_CS_GREENMAGENTA] ? toEdit.colorShift.b + mods.colorShift.b : mods.colorShift.b;
|
||||||
if (lumaDenoise.enabled) toEdit.lumaDenoise.enabled = mods.lumaDenoise.enabled;
|
//if (lumaDenoise.enabled) toEdit.lumaDenoise.enabled = mods.lumaDenoise.enabled;
|
||||||
if (lumaDenoise.radius) toEdit.lumaDenoise.radius = mods.lumaDenoise.radius;
|
//if (lumaDenoise.radius) toEdit.lumaDenoise.radius = mods.lumaDenoise.radius;
|
||||||
if (lumaDenoise.edgetolerance) toEdit.lumaDenoise.edgetolerance = dontforceSet && options.baBehav[ADDSET_LD_EDGETOLERANCE] ? toEdit.lumaDenoise.edgetolerance + mods.lumaDenoise.edgetolerance : mods.lumaDenoise.edgetolerance;
|
//if (lumaDenoise.edgetolerance) toEdit.lumaDenoise.edgetolerance = dontforceSet && options.baBehav[ADDSET_LD_EDGETOLERANCE] ? toEdit.lumaDenoise.edgetolerance + mods.lumaDenoise.edgetolerance : mods.lumaDenoise.edgetolerance;
|
||||||
if (colorDenoise.enabled) toEdit.colorDenoise.enabled = mods.colorDenoise.enabled;
|
//if (colorDenoise.enabled) toEdit.colorDenoise.enabled = mods.colorDenoise.enabled;
|
||||||
if (colorDenoise.amount) toEdit.colorDenoise.amount = mods.colorDenoise.amount;
|
//if (colorDenoise.amount) toEdit.colorDenoise.amount = mods.colorDenoise.amount;
|
||||||
|
|
||||||
if (defringe.enabled) toEdit.defringe.enabled = mods.defringe.enabled;
|
if (defringe.enabled) toEdit.defringe.enabled = mods.defringe.enabled;
|
||||||
if (defringe.radius) toEdit.defringe.radius = mods.defringe.radius;
|
if (defringe.radius) toEdit.defringe.radius = mods.defringe.radius;
|
||||||
@ -512,7 +516,7 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
|||||||
if (coarse.hflip) toEdit.coarse.hflip = mods.coarse.hflip ? !toEdit.coarse.hflip : toEdit.coarse.hflip;
|
if (coarse.hflip) toEdit.coarse.hflip = mods.coarse.hflip ? !toEdit.coarse.hflip : toEdit.coarse.hflip;
|
||||||
if (coarse.vflip) toEdit.coarse.vflip = mods.coarse.vflip ? !toEdit.coarse.vflip : toEdit.coarse.vflip;
|
if (coarse.vflip) toEdit.coarse.vflip = mods.coarse.vflip ? !toEdit.coarse.vflip : toEdit.coarse.vflip;
|
||||||
if (commonTrans.autofill) toEdit.commonTrans.autofill = mods.commonTrans.autofill;
|
if (commonTrans.autofill) toEdit.commonTrans.autofill = mods.commonTrans.autofill;
|
||||||
if (rotate.degree) toEdit.rotate.degree = dontforceSet && options.baBehav[17] ? toEdit.rotate.degree + mods.rotate.degree : mods.rotate.degree;
|
if (rotate.degree) toEdit.rotate.degree = dontforceSet && options.baBehav[ADDSET_ROTATE_DEGREE] ? toEdit.rotate.degree + mods.rotate.degree : mods.rotate.degree;
|
||||||
if (distortion.uselensfun) toEdit.distortion.uselensfun = mods.distortion.uselensfun;
|
if (distortion.uselensfun) toEdit.distortion.uselensfun = mods.distortion.uselensfun;
|
||||||
if (distortion.amount) toEdit.distortion.amount = dontforceSet && options.baBehav[ADDSET_DIST_AMOUNT] ? toEdit.distortion.amount + mods.distortion.amount : mods.distortion.amount;
|
if (distortion.amount) toEdit.distortion.amount = dontforceSet && options.baBehav[ADDSET_DIST_AMOUNT] ? toEdit.distortion.amount + mods.distortion.amount : mods.distortion.amount;
|
||||||
if (perspective.horizontal) toEdit.perspective.horizontal = dontforceSet && options.baBehav[ADDSET_PERSPECTIVE] ? toEdit.perspective.horizontal + mods.perspective.horizontal : mods.perspective.horizontal;
|
if (perspective.horizontal) toEdit.perspective.horizontal = dontforceSet && options.baBehav[ADDSET_PERSPECTIVE] ? toEdit.perspective.horizontal + mods.perspective.horizontal : mods.perspective.horizontal;
|
||||||
@ -566,7 +570,8 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
|||||||
if (raw.exTwoGreen) toEdit.raw.twogreen = mods.raw.twogreen;
|
if (raw.exTwoGreen) toEdit.raw.twogreen = mods.raw.twogreen;
|
||||||
|
|
||||||
if (raw.greenEq) toEdit.raw.greenthresh = dontforceSet && options.baBehav[ADDSET_PREPROCESS_GREENEQUIL] ? toEdit.raw.greenthresh + mods.raw.greenthresh : mods.raw.greenthresh;
|
if (raw.greenEq) toEdit.raw.greenthresh = dontforceSet && options.baBehav[ADDSET_PREPROCESS_GREENEQUIL] ? toEdit.raw.greenthresh + mods.raw.greenthresh : mods.raw.greenthresh;
|
||||||
if (raw.hotDeadPixel) toEdit.raw.hotdeadpix_filt = mods.raw.hotdeadpix_filt;
|
if (raw.hotDeadPixelFilter) toEdit.raw.hotdeadpix_filt = mods.raw.hotdeadpix_filt;
|
||||||
|
if (raw.hotDeadPixelThresh) toEdit.raw.hotdeadpix_thresh = mods.raw.hotdeadpix_thresh;
|
||||||
if (raw.linenoise) toEdit.raw.linenoise = dontforceSet && options.baBehav[ADDSET_PREPROCESS_LINEDENOISE] ? toEdit.raw.linenoise + mods.raw.linenoise : mods.raw.linenoise;
|
if (raw.linenoise) toEdit.raw.linenoise = dontforceSet && options.baBehav[ADDSET_PREPROCESS_LINEDENOISE] ? toEdit.raw.linenoise + mods.raw.linenoise : mods.raw.linenoise;
|
||||||
if (raw.darkFrame) toEdit.raw.dark_frame = mods.raw.dark_frame;
|
if (raw.darkFrame) toEdit.raw.dark_frame = mods.raw.dark_frame;
|
||||||
if (raw.dfAuto) toEdit.raw.df_autoselect = mods.raw.df_autoselect;
|
if (raw.dfAuto) toEdit.raw.df_autoselect = mods.raw.df_autoselect;
|
||||||
@ -584,12 +589,21 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
|||||||
if (hsvequalizer.scurve) toEdit.hsvequalizer.scurve = mods.hsvequalizer.scurve;
|
if (hsvequalizer.scurve) toEdit.hsvequalizer.scurve = mods.hsvequalizer.scurve;
|
||||||
if (hsvequalizer.vcurve) toEdit.hsvequalizer.vcurve = mods.hsvequalizer.vcurve;
|
if (hsvequalizer.vcurve) toEdit.hsvequalizer.vcurve = mods.hsvequalizer.vcurve;
|
||||||
|
|
||||||
// if (exif) toEdit.exif==mo.exif = mods.exif==other.exif;
|
// Exif changes are added to the existing ones
|
||||||
// if (iptc;) toEdit.iptc==other.iptc; = mods.iptc==other.iptc;;
|
if (exif)
|
||||||
|
for (procparams::ExifPairs::const_iterator i=mods.exif.begin(); i!=mods.exif.end(); i++) {
|
||||||
|
toEdit.exif[i->first] = i->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPTC changes are added to the existing ones
|
||||||
|
if (iptc)
|
||||||
|
for (procparams::IPTCPairs::const_iterator i=mods.iptc.begin(); i!=mods.iptc.end(); i++) {
|
||||||
|
toEdit.iptc[i->first] = i->second;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RAWParamsEdited::isUnchanged() const {
|
bool RAWParamsEdited::isUnchanged() const {
|
||||||
return ccSteps && dmethod && dcbIterations && dcbEnhance && allEnhance && caCorrection && caRed && caBlue && greenEq
|
return ccSteps && dmethod && dcbIterations && dcbEnhance && allEnhance && caCorrection && caRed && caBlue && greenEq
|
||||||
&& hotDeadPixel && linenoise && darkFrame && dfAuto && ff_file && ff_AutoSelect && ff_BlurRadius && ff_BlurType
|
&& hotDeadPixelFilter && hotDeadPixelThresh && linenoise && darkFrame && dfAuto && ff_file && ff_AutoSelect && ff_BlurRadius && ff_BlurType
|
||||||
&& exPos && exPreser && exBlackzero && exBlackone && exBlacktwo && exBlackthree && exTwoGreen;
|
&& exPos && exPreser && exBlackzero && exBlackone && exBlacktwo && exBlackthree && exTwoGreen;
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,16 @@
|
|||||||
|
|
||||||
#include <glibmm.h>
|
#include <glibmm.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "../rtengine/rtengine.h"
|
|
||||||
#include "../rtengine/procparams.h"
|
#include "../rtengine/procparams.h"
|
||||||
|
#include "../rtengine/rtengine.h"
|
||||||
|
|
||||||
|
class GeneralParamsEdited {
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool rank;
|
||||||
|
bool colorlabel;
|
||||||
|
bool intrash;
|
||||||
|
};
|
||||||
|
|
||||||
class ToneCurveParamsEdited {
|
class ToneCurveParamsEdited {
|
||||||
|
|
||||||
@ -111,14 +119,14 @@ class VibranceParamsEdited {
|
|||||||
bool pastsattog;
|
bool pastsattog;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ColorBoostParamsEdited {
|
/*class ColorBoostParamsEdited {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool amount;
|
bool amount;
|
||||||
bool avoidclip;
|
bool avoidclip;
|
||||||
bool enable_saturationlimiter;
|
bool enable_saturationlimiter;
|
||||||
bool saturationlimit;
|
bool saturationlimit;
|
||||||
};
|
};*/
|
||||||
|
|
||||||
class WBParamsEdited {
|
class WBParamsEdited {
|
||||||
|
|
||||||
@ -128,27 +136,27 @@ class WBParamsEdited {
|
|||||||
bool green;
|
bool green;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ColorShiftParamsEdited {
|
/*class ColorShiftParamsEdited {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool a;
|
bool a;
|
||||||
bool b;
|
bool b;
|
||||||
};
|
};*/
|
||||||
|
|
||||||
class LumaDenoiseParamsEdited {
|
/*class LumaDenoiseParamsEdited {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool enabled;
|
bool enabled;
|
||||||
bool radius;
|
bool radius;
|
||||||
bool edgetolerance;
|
bool edgetolerance;
|
||||||
};
|
};*/
|
||||||
|
|
||||||
class ColorDenoiseParamsEdited {
|
/*class ColorDenoiseParamsEdited {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool enabled;
|
bool enabled;
|
||||||
bool amount;
|
bool amount;
|
||||||
};
|
};*/
|
||||||
|
|
||||||
class DefringeParamsEdited {
|
class DefringeParamsEdited {
|
||||||
|
|
||||||
@ -331,7 +339,8 @@ class RAWParamsEdited {
|
|||||||
bool caRed;
|
bool caRed;
|
||||||
bool caBlue;
|
bool caBlue;
|
||||||
bool greenEq;
|
bool greenEq;
|
||||||
bool hotDeadPixel;
|
bool hotDeadPixelFilter;
|
||||||
|
bool hotDeadPixelThresh;
|
||||||
bool linenoise;
|
bool linenoise;
|
||||||
bool darkFrame;
|
bool darkFrame;
|
||||||
bool dfAuto;
|
bool dfAuto;
|
||||||
@ -350,23 +359,10 @@ class RAWParamsEdited {
|
|||||||
bool isUnchanged() const;
|
bool isUnchanged() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ExifPairEdited {
|
|
||||||
|
|
||||||
public:
|
|
||||||
Glib::ustring field;
|
|
||||||
bool value;
|
|
||||||
};
|
|
||||||
|
|
||||||
class IPTCPairEdited {
|
|
||||||
|
|
||||||
public:
|
|
||||||
Glib::ustring field;
|
|
||||||
bool values;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ParamsEdited {
|
class ParamsEdited {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
GeneralParamsEdited general;
|
||||||
ToneCurveParamsEdited toneCurve;
|
ToneCurveParamsEdited toneCurve;
|
||||||
LCurveParamsEdited labCurve;
|
LCurveParamsEdited labCurve;
|
||||||
RGBCurvesParamsEdited rgbCurves;
|
RGBCurvesParamsEdited rgbCurves;
|
||||||
@ -374,11 +370,11 @@ class ParamsEdited {
|
|||||||
SharpenEdgeParamsEdited sharpenEdge;
|
SharpenEdgeParamsEdited sharpenEdge;
|
||||||
SharpenMicroParamsEdited sharpenMicro;
|
SharpenMicroParamsEdited sharpenMicro;
|
||||||
VibranceParamsEdited vibrance;
|
VibranceParamsEdited vibrance;
|
||||||
ColorBoostParamsEdited colorBoost;
|
//ColorBoostParamsEdited colorBoost;
|
||||||
WBParamsEdited wb;
|
WBParamsEdited wb;
|
||||||
ColorShiftParamsEdited colorShift;
|
//ColorShiftParamsEdited colorShift;
|
||||||
LumaDenoiseParamsEdited lumaDenoise;
|
//LumaDenoiseParamsEdited lumaDenoise;
|
||||||
ColorDenoiseParamsEdited colorDenoise;
|
//ColorDenoiseParamsEdited colorDenoise;
|
||||||
DefringeParamsEdited defringe;
|
DefringeParamsEdited defringe;
|
||||||
DirPyrDenoiseParamsEdited dirpyrDenoise;
|
DirPyrDenoiseParamsEdited dirpyrDenoise;
|
||||||
EPDParamsEdited edgePreservingDecompositionUI;
|
EPDParamsEdited edgePreservingDecompositionUI;
|
||||||
@ -399,8 +395,8 @@ class ParamsEdited {
|
|||||||
RAWParamsEdited raw;
|
RAWParamsEdited raw;
|
||||||
DirPyrEqualizerParamsEdited dirpyrequalizer;
|
DirPyrEqualizerParamsEdited dirpyrequalizer;
|
||||||
HSVEqualizerParamsEdited hsvequalizer;
|
HSVEqualizerParamsEdited hsvequalizer;
|
||||||
std::vector<ExifPairEdited> exif;
|
bool exif;
|
||||||
std::vector<IPTCPairEdited> iptc;
|
bool iptc;
|
||||||
|
|
||||||
ParamsEdited ();
|
ParamsEdited ();
|
||||||
|
|
||||||
|
@ -18,11 +18,12 @@
|
|||||||
*/
|
*/
|
||||||
#include "partialpastedlg.h"
|
#include "partialpastedlg.h"
|
||||||
#include "multilangmgr.h"
|
#include "multilangmgr.h"
|
||||||
|
#include "paramsedited.h"
|
||||||
|
|
||||||
PartialPasteDlg::PartialPasteDlg () {
|
PartialPasteDlg::PartialPasteDlg (Glib::ustring title) {
|
||||||
|
|
||||||
set_modal (true);
|
set_modal (true);
|
||||||
set_title (M("PARTIALPASTE_DIALOGLABEL"));
|
set_title (title);
|
||||||
|
|
||||||
everything = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EVERYTHING")));
|
everything = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EVERYTHING")));
|
||||||
everything ->set_name("partialPasteHeader");
|
everything ->set_name("partialPasteHeader");
|
||||||
@ -47,6 +48,7 @@ PartialPasteDlg::PartialPasteDlg () {
|
|||||||
exposure = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXPOSURE")));
|
exposure = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXPOSURE")));
|
||||||
hlrec = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_HLRECONSTRUCTION")));
|
hlrec = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_HLRECONSTRUCTION")));
|
||||||
sh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHADOWSHIGHLIGHTS")));
|
sh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHADOWSHIGHLIGHTS")));
|
||||||
|
epd = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EPD")));
|
||||||
labcurve = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LABCURVE")));
|
labcurve = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LABCURVE")));
|
||||||
|
|
||||||
// options in detail:
|
// options in detail:
|
||||||
@ -56,7 +58,6 @@ PartialPasteDlg::PartialPasteDlg () {
|
|||||||
impden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IMPULSEDENOISE")));
|
impden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IMPULSEDENOISE")));
|
||||||
dirpyreq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYREQUALIZER")));
|
dirpyreq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYREQUALIZER")));
|
||||||
defringe = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DEFRINGE")));
|
defringe = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DEFRINGE")));
|
||||||
edgePreservingDecompositionUI = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EPD")));
|
|
||||||
|
|
||||||
// options in color:
|
// options in color:
|
||||||
vibrance = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_VIBRANCE")));
|
vibrance = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_VIBRANCE")));
|
||||||
@ -122,6 +123,7 @@ PartialPasteDlg::PartialPasteDlg () {
|
|||||||
vboxes[0]->pack_start (*exposure, Gtk::PACK_SHRINK, 2);
|
vboxes[0]->pack_start (*exposure, Gtk::PACK_SHRINK, 2);
|
||||||
vboxes[0]->pack_start (*hlrec, Gtk::PACK_SHRINK, 2);
|
vboxes[0]->pack_start (*hlrec, Gtk::PACK_SHRINK, 2);
|
||||||
vboxes[0]->pack_start (*sh, Gtk::PACK_SHRINK, 2);
|
vboxes[0]->pack_start (*sh, Gtk::PACK_SHRINK, 2);
|
||||||
|
vboxes[0]->pack_start (*epd, Gtk::PACK_SHRINK, 2);
|
||||||
vboxes[0]->pack_start (*labcurve, Gtk::PACK_SHRINK, 2);
|
vboxes[0]->pack_start (*labcurve, Gtk::PACK_SHRINK, 2);
|
||||||
|
|
||||||
vboxes[1]->pack_start (*detail, Gtk::PACK_SHRINK, 2);
|
vboxes[1]->pack_start (*detail, Gtk::PACK_SHRINK, 2);
|
||||||
@ -132,7 +134,6 @@ PartialPasteDlg::PartialPasteDlg () {
|
|||||||
vboxes[1]->pack_start (*impden, Gtk::PACK_SHRINK, 2);
|
vboxes[1]->pack_start (*impden, Gtk::PACK_SHRINK, 2);
|
||||||
vboxes[1]->pack_start (*dirpyrden, Gtk::PACK_SHRINK, 2);
|
vboxes[1]->pack_start (*dirpyrden, Gtk::PACK_SHRINK, 2);
|
||||||
vboxes[1]->pack_start (*defringe, Gtk::PACK_SHRINK, 2);
|
vboxes[1]->pack_start (*defringe, Gtk::PACK_SHRINK, 2);
|
||||||
vboxes[1]->pack_start (*edgePreservingDecompositionUI, Gtk::PACK_SHRINK, 2);
|
|
||||||
vboxes[1]->pack_start (*dirpyreq, Gtk::PACK_SHRINK, 2);
|
vboxes[1]->pack_start (*dirpyreq, Gtk::PACK_SHRINK, 2);
|
||||||
//vboxes[1]->pack_start (*waveq, Gtk::PACK_SHRINK, 2);
|
//vboxes[1]->pack_start (*waveq, Gtk::PACK_SHRINK, 2);
|
||||||
|
|
||||||
@ -239,6 +240,7 @@ PartialPasteDlg::PartialPasteDlg () {
|
|||||||
exposureConn = exposure->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
|
exposureConn = exposure->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
hlrecConn = hlrec->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
|
hlrecConn = hlrec->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
shConn = sh->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
|
shConn = sh->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
|
epdConn = epd->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
labcurveConn = labcurve->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
|
labcurveConn = labcurve->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
|
|
||||||
sharpenConn = sharpen->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
|
sharpenConn = sharpen->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
@ -249,7 +251,6 @@ PartialPasteDlg::PartialPasteDlg () {
|
|||||||
dirpyreqConn = dirpyreq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
|
dirpyreqConn = dirpyreq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
//waveqConn = waveq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
|
//waveqConn = waveq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
defringeConn = defringe->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
|
defringeConn = defringe->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
edgePreservingDecompositionUIConn = edgePreservingDecompositionUI->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
|
|
||||||
|
|
||||||
vibranceConn = vibrance->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
|
vibranceConn = vibrance->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
chmixerConn = chmixer->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
|
chmixerConn = chmixer->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
@ -294,10 +295,10 @@ PartialPasteDlg::PartialPasteDlg () {
|
|||||||
ff_BlurRadiusConn = ff_BlurRadius->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
|
ff_BlurRadiusConn = ff_BlurRadius->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
ff_BlurTypeConn = ff_BlurType->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
|
ff_BlurTypeConn = ff_BlurType->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
|
|
||||||
add_button (Gtk::StockID("gtk-ok"), 1);
|
add_button (Gtk::StockID("gtk-ok"), Gtk::RESPONSE_OK);
|
||||||
add_button (Gtk::StockID("gtk-cancel"), 0);
|
add_button (Gtk::StockID("gtk-cancel"), Gtk::RESPONSE_CANCEL);
|
||||||
set_response_sensitive (1);
|
set_response_sensitive (Gtk::RESPONSE_OK);
|
||||||
set_default_response (1);
|
set_default_response (Gtk::RESPONSE_OK);
|
||||||
show_all_children ();
|
show_all_children ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -414,6 +415,7 @@ void PartialPasteDlg::basicToggled () {
|
|||||||
exposureConn.block (true);
|
exposureConn.block (true);
|
||||||
hlrecConn.block (true);
|
hlrecConn.block (true);
|
||||||
shConn.block (true);
|
shConn.block (true);
|
||||||
|
epdConn.block(true);
|
||||||
labcurveConn.block (true);
|
labcurveConn.block (true);
|
||||||
|
|
||||||
basic->set_inconsistent (false);
|
basic->set_inconsistent (false);
|
||||||
@ -422,13 +424,15 @@ void PartialPasteDlg::basicToggled () {
|
|||||||
exposure->set_active (basic->get_active ());
|
exposure->set_active (basic->get_active ());
|
||||||
hlrec->set_active (basic->get_active ());
|
hlrec->set_active (basic->get_active ());
|
||||||
sh->set_active (basic->get_active ());
|
sh->set_active (basic->get_active ());
|
||||||
|
epd->set_active (basic->get_active ());
|
||||||
labcurve->set_active (basic->get_active ());
|
labcurve->set_active (basic->get_active ());
|
||||||
|
|
||||||
wbConn.block (false);
|
wbConn.block (false);
|
||||||
exposureConn.block (false);
|
exposureConn.block (false);
|
||||||
hlrecConn.block (false);
|
hlrecConn.block (false);
|
||||||
labcurveConn.block (false);
|
|
||||||
shConn.block (false);
|
shConn.block (false);
|
||||||
|
epdConn.block (false);
|
||||||
|
labcurveConn.block (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PartialPasteDlg::detailToggled () {
|
void PartialPasteDlg::detailToggled () {
|
||||||
@ -439,7 +443,6 @@ void PartialPasteDlg::detailToggled () {
|
|||||||
impdenConn.block (true);
|
impdenConn.block (true);
|
||||||
dirpyrdenConn.block (true);
|
dirpyrdenConn.block (true);
|
||||||
defringeConn.block (true);
|
defringeConn.block (true);
|
||||||
edgePreservingDecompositionUIConn.block(true);
|
|
||||||
dirpyreqConn.block (true);
|
dirpyreqConn.block (true);
|
||||||
//waveqConn.block (true);
|
//waveqConn.block (true);
|
||||||
|
|
||||||
@ -451,7 +454,6 @@ void PartialPasteDlg::detailToggled () {
|
|||||||
impden->set_active (detail->get_active ());
|
impden->set_active (detail->get_active ());
|
||||||
dirpyrden->set_active (detail->get_active ());
|
dirpyrden->set_active (detail->get_active ());
|
||||||
defringe->set_active (detail->get_active ());
|
defringe->set_active (detail->get_active ());
|
||||||
edgePreservingDecompositionUI->set_active (detail->get_active ());
|
|
||||||
dirpyreq->set_active (detail->get_active ());
|
dirpyreq->set_active (detail->get_active ());
|
||||||
//waveq->set_active (detail->get_active ());
|
//waveq->set_active (detail->get_active ());
|
||||||
|
|
||||||
@ -461,7 +463,6 @@ void PartialPasteDlg::detailToggled () {
|
|||||||
impdenConn.block (false);
|
impdenConn.block (false);
|
||||||
dirpyrdenConn.block (false);
|
dirpyrdenConn.block (false);
|
||||||
defringeConn.block (false);
|
defringeConn.block (false);
|
||||||
edgePreservingDecompositionUIConn.block (false);
|
|
||||||
dirpyreqConn.block (false);
|
dirpyreqConn.block (false);
|
||||||
//waveqConn.block (false);
|
//waveqConn.block (false);
|
||||||
}
|
}
|
||||||
@ -553,70 +554,94 @@ void PartialPasteDlg::metaicmToggled () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const rtengine::procparams::ProcParams* src) {
|
/*
|
||||||
|
* Copies the selected items from the source ProcParams+ParamsEdited(optional)
|
||||||
|
* to the destination ProcParams.
|
||||||
|
*/
|
||||||
|
void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, ParamsEdited* dstPE, const rtengine::procparams::ProcParams* srcPP, const ParamsEdited* srcPE) {
|
||||||
|
|
||||||
if (wb->get_active ()) dst->wb = src->wb;
|
ParamsEdited falsePE; // falsePE is a workaround to set a group of ParamsEdited to false
|
||||||
if (exposure->get_active ()) dst->toneCurve = src->toneCurve;
|
ParamsEdited filterPE; // Contains the initial information about the loaded values
|
||||||
if (hlrec->get_active ()) dst->hlrecovery = src->hlrecovery;
|
if (srcPE) {
|
||||||
if (sh->get_active ()) dst->sh = src->sh;
|
filterPE = *srcPE;
|
||||||
if (labcurve->get_active ()) dst->labCurve = src->labCurve;
|
|
||||||
|
|
||||||
if (sharpen->get_active ()) dst->sharpening = src->sharpening;
|
|
||||||
if (sharpenedge->get_active ()) dst->sharpenEdge = src->sharpenEdge;
|
|
||||||
if (sharpenmicro->get_active()) dst->sharpenMicro = src->sharpenMicro;
|
|
||||||
if (impden->get_active ()) dst->impulseDenoise = src->impulseDenoise;
|
|
||||||
if (dirpyreq->get_active ()) dst->dirpyrequalizer = src->dirpyrequalizer;
|
|
||||||
if (defringe->get_active ()) dst->defringe = src->defringe;
|
|
||||||
if (dirpyrden->get_active ()) dst->dirpyrDenoise = src->dirpyrDenoise;
|
|
||||||
|
|
||||||
if (vibrance->get_active ()) dst->vibrance = src->vibrance;
|
|
||||||
if (chmixer->get_active ()) dst->chmixer = src->chmixer;
|
|
||||||
if (hsveq->get_active ()) dst->hsvequalizer = src->hsvequalizer;
|
|
||||||
if (rgbcurves->get_active ()) dst->rgbCurves = src->rgbCurves;
|
|
||||||
if (icm->get_active ()) dst->icm = src->icm;
|
|
||||||
|
|
||||||
if (distortion->get_active ()) dst->distortion = src->distortion;
|
|
||||||
if (cacorr->get_active ()) dst->cacorrection = src->cacorrection;
|
|
||||||
if (vignetting->get_active ()) dst->vignetting = src->vignetting;
|
|
||||||
|
|
||||||
if (coarserot->get_active ()) dst->coarse = src->coarse;
|
|
||||||
if (finerot->get_active ()) dst->rotate = src->rotate;
|
|
||||||
if (crop->get_active ()) dst->crop = src->crop;
|
|
||||||
if (resize->get_active ()) dst->resize = src->resize;
|
|
||||||
if (perspective->get_active ()) dst->perspective = src->perspective;
|
|
||||||
if (commonTrans->get_active ()) dst->commonTrans = src->commonTrans;
|
|
||||||
|
|
||||||
if (exifch->get_active ()) dst->exif = src->exif;
|
|
||||||
if (iptc->get_active ()) dst->iptc = src->iptc;
|
|
||||||
if (icm->get_active ()) dst->icm = src->icm;
|
|
||||||
if (gam->get_active ()) dst->gam = src->gam;
|
|
||||||
|
|
||||||
if (raw_dmethod->get_active ()) dst->raw.dmethod =src->raw.dmethod;
|
|
||||||
if (raw_ccSteps->get_active ()) dst->raw.ccSteps =src->raw.ccSteps;
|
|
||||||
if (raw_dcb_iterations->get_active ()) dst->raw.dcb_iterations =src->raw.dcb_iterations;
|
|
||||||
if (raw_dcb_enhance->get_active ()) dst->raw.dcb_enhance =src->raw.dcb_enhance;
|
|
||||||
if (raw_all_enhance->get_active ()) dst->raw.all_enhance =src->raw.all_enhance;
|
|
||||||
|
|
||||||
if (raw_expos->get_active ()) dst->raw.expos =src->raw.expos;
|
|
||||||
if (raw_preser->get_active ()) dst->raw.preser =src->raw.preser;
|
|
||||||
if (raw_black->get_active ()){
|
|
||||||
dst->raw.blackzero =src->raw.blackzero;
|
|
||||||
dst->raw.blackone =src->raw.blackone;
|
|
||||||
dst->raw.blacktwo =src->raw.blacktwo;
|
|
||||||
dst->raw.blackthree =src->raw.blackthree;
|
|
||||||
dst->raw.twogreen =src->raw.twogreen;
|
|
||||||
}
|
}
|
||||||
if (raw_ca_autocorrect->get_active ()) dst->raw.ca_autocorrect =src->raw.ca_autocorrect;
|
else {
|
||||||
if (raw_cared->get_active ()) dst->raw.cared =src->raw.cared;
|
// By default, everything has to be copied
|
||||||
if (raw_cablue->get_active ()) dst->raw.cablue =src->raw.cablue;
|
filterPE.set(true);
|
||||||
if (raw_hotdeadpix_filt->get_active ()) dst->raw.hotdeadpix_filt=src->raw.hotdeadpix_filt;
|
}
|
||||||
if (raw_linenoise->get_active ()) dst->raw.linenoise =src->raw.linenoise;
|
|
||||||
if (raw_greenthresh->get_active ()) dst->raw.greenthresh =src->raw.greenthresh;
|
|
||||||
if (df_file->get_active ()) dst->raw.dark_frame = src->raw.dark_frame;
|
// the general section is always ignored, whichever operation we use the PartialPaste for
|
||||||
if (df_AutoSelect->get_active ()) dst->raw.df_autoselect = src->raw.df_autoselect;
|
filterPE.general = falsePE.general;
|
||||||
if (ff_file->get_active ()) dst->raw.ff_file = src->raw.ff_file;
|
|
||||||
if (ff_AutoSelect->get_active ()) dst->raw.ff_AutoSelect = src->raw.ff_AutoSelect;
|
|
||||||
if (ff_BlurRadius->get_active ()) dst->raw.ff_BlurRadius = src->raw.ff_BlurRadius;
|
// Now we filter out the filter depending on the checked items
|
||||||
if (ff_BlurType->get_active ()) dst->raw.ff_BlurType = src->raw.ff_BlurType;
|
if (!wb->get_active ()) filterPE.wb = falsePE.wb;
|
||||||
|
if (!exposure->get_active ()) filterPE.toneCurve = falsePE.toneCurve;
|
||||||
|
if (!hlrec->get_active ()) filterPE.hlrecovery = falsePE.hlrecovery;
|
||||||
|
if (!sh->get_active ()) filterPE.sh = falsePE.sh;
|
||||||
|
if (!epd->get_active ()) filterPE.edgePreservingDecompositionUI = falsePE.edgePreservingDecompositionUI;
|
||||||
|
if (!labcurve->get_active ()) filterPE.labCurve = falsePE.labCurve;
|
||||||
|
|
||||||
|
if (!sharpen->get_active ()) filterPE.sharpening = falsePE.sharpening;
|
||||||
|
if (!sharpenedge->get_active ()) filterPE.sharpenEdge = falsePE.sharpenEdge;
|
||||||
|
if (!sharpenmicro->get_active()) filterPE.sharpenMicro = falsePE.sharpenMicro;
|
||||||
|
if (!impden->get_active ()) filterPE.impulseDenoise = falsePE.impulseDenoise;
|
||||||
|
if (!dirpyreq->get_active ()) filterPE.dirpyrequalizer = falsePE.dirpyrequalizer;
|
||||||
|
if (!defringe->get_active ()) filterPE.defringe = falsePE.defringe;
|
||||||
|
if (!dirpyrden->get_active ()) filterPE.dirpyrDenoise = falsePE.dirpyrDenoise;
|
||||||
|
|
||||||
|
if (!vibrance->get_active ()) filterPE.vibrance = falsePE.vibrance;
|
||||||
|
if (!chmixer->get_active ()) filterPE.chmixer = falsePE.chmixer;
|
||||||
|
if (!hsveq->get_active ()) filterPE.hsvequalizer = falsePE.hsvequalizer;
|
||||||
|
if (!rgbcurves->get_active ()) filterPE.rgbCurves = falsePE.rgbCurves;
|
||||||
|
if (!icm->get_active ()) filterPE.icm = falsePE.icm;
|
||||||
|
|
||||||
|
if (!distortion->get_active ()) filterPE.distortion = falsePE.distortion;
|
||||||
|
if (!cacorr->get_active ()) filterPE.cacorrection = falsePE.cacorrection;
|
||||||
|
if (!vignetting->get_active ()) filterPE.vignetting = falsePE.vignetting;
|
||||||
|
|
||||||
|
if (!coarserot->get_active ()) filterPE.coarse = falsePE.coarse;
|
||||||
|
if (!finerot->get_active ()) filterPE.rotate = falsePE.rotate;
|
||||||
|
if (!crop->get_active ()) filterPE.crop = falsePE.crop;
|
||||||
|
if (!resize->get_active ()) filterPE.resize = falsePE.resize;
|
||||||
|
if (!perspective->get_active ()) filterPE.perspective = falsePE.perspective;
|
||||||
|
if (!commonTrans->get_active ()) filterPE.commonTrans = falsePE.commonTrans;
|
||||||
|
|
||||||
|
if (!exifch->get_active ()) filterPE.exif = falsePE.exif;
|
||||||
|
if (!iptc->get_active ()) filterPE.iptc = falsePE.iptc;
|
||||||
|
if (!icm->get_active ()) filterPE.icm = falsePE.icm;
|
||||||
|
|
||||||
|
if (!raw_dmethod->get_active ()) filterPE.raw.dmethod = falsePE.raw.dmethod;
|
||||||
|
if (!raw_ccSteps->get_active ()) filterPE.raw.ccSteps = falsePE.raw.ccSteps;
|
||||||
|
if (!raw_dcb_iterations->get_active ()) filterPE.raw.dcbIterations = falsePE.raw.dcbIterations;
|
||||||
|
if (!raw_dcb_enhance->get_active ()) filterPE.raw.dcbEnhance = falsePE.raw.dcbEnhance;
|
||||||
|
if (!raw_all_enhance->get_active ()) filterPE.raw.allEnhance = falsePE.raw.allEnhance;
|
||||||
|
|
||||||
|
if (!raw_expos->get_active ()) filterPE.raw.exPos = falsePE.raw.exPos;
|
||||||
|
if (!raw_preser->get_active ()) filterPE.raw.exPreser = falsePE.raw.exPreser;
|
||||||
|
if (!raw_black->get_active ()) { filterPE.raw.exBlackzero = falsePE.raw.exBlackzero;
|
||||||
|
filterPE.raw.exBlackone = falsePE.raw.exBlackone;
|
||||||
|
filterPE.raw.exBlacktwo = falsePE.raw.exBlacktwo;
|
||||||
|
filterPE.raw.exBlackthree = falsePE.raw.exBlackthree;
|
||||||
|
filterPE.raw.exTwoGreen = falsePE.raw.exTwoGreen; }
|
||||||
|
if (!raw_ca_autocorrect->get_active ()) filterPE.raw.caCorrection = falsePE.raw.caCorrection;
|
||||||
|
if (!raw_cared->get_active ()) filterPE.raw.caRed = falsePE.raw.caRed;
|
||||||
|
if (!raw_cablue->get_active ()) filterPE.raw.caBlue = falsePE.raw.caBlue;
|
||||||
|
if (!raw_hotdeadpix_filt->get_active ()) { filterPE.raw.hotDeadPixelFilter = falsePE.raw.hotDeadPixelFilter;
|
||||||
|
filterPE.raw.hotDeadPixelThresh = falsePE.raw.hotDeadPixelThresh; }
|
||||||
|
if (!raw_linenoise->get_active ()) filterPE.raw.linenoise = falsePE.raw.linenoise;
|
||||||
|
if (!raw_greenthresh->get_active ()) filterPE.raw.greenEq = falsePE.raw.greenEq;
|
||||||
|
if (!df_file->get_active ()) filterPE.raw.darkFrame = falsePE.raw.darkFrame;
|
||||||
|
if (!df_AutoSelect->get_active ()) filterPE.raw.dfAuto = falsePE.raw.dfAuto;
|
||||||
|
if (!ff_file->get_active ()) filterPE.raw.ff_file = falsePE.raw.ff_file;
|
||||||
|
if (!ff_AutoSelect->get_active ()) filterPE.raw.ff_AutoSelect = falsePE.raw.ff_AutoSelect;
|
||||||
|
if (!ff_BlurRadius->get_active ()) filterPE.raw.ff_BlurRadius = falsePE.raw.ff_BlurRadius;
|
||||||
|
if (!ff_BlurType->get_active ()) filterPE.raw.ff_BlurType = falsePE.raw.ff_BlurType;
|
||||||
|
|
||||||
|
if (dstPE) *dstPE = filterPE;
|
||||||
|
|
||||||
|
// Apply the filter!
|
||||||
|
filterPE.combine(*dstPP, *srcPP, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ class PartialPasteDlg : public Gtk::Dialog {
|
|||||||
Gtk::CheckButton* exposure;
|
Gtk::CheckButton* exposure;
|
||||||
Gtk::CheckButton* hlrec;
|
Gtk::CheckButton* hlrec;
|
||||||
Gtk::CheckButton* sh;
|
Gtk::CheckButton* sh;
|
||||||
|
Gtk::CheckButton* epd;
|
||||||
Gtk::CheckButton* labcurve;
|
Gtk::CheckButton* labcurve;
|
||||||
|
|
||||||
// options in detail:
|
// options in detail:
|
||||||
@ -49,10 +50,9 @@ class PartialPasteDlg : public Gtk::Dialog {
|
|||||||
Gtk::CheckButton* sharpenedge;
|
Gtk::CheckButton* sharpenedge;
|
||||||
Gtk::CheckButton* sharpenmicro;
|
Gtk::CheckButton* sharpenmicro;
|
||||||
Gtk::CheckButton* impden;
|
Gtk::CheckButton* impden;
|
||||||
Gtk::CheckButton* waveq;
|
//Gtk::CheckButton* waveq;
|
||||||
Gtk::CheckButton* dirpyrden;
|
Gtk::CheckButton* dirpyrden;
|
||||||
Gtk::CheckButton* defringe;
|
Gtk::CheckButton* defringe;
|
||||||
Gtk::CheckButton* edgePreservingDecompositionUI;
|
|
||||||
Gtk::CheckButton* dirpyreq;
|
Gtk::CheckButton* dirpyreq;
|
||||||
|
|
||||||
// options in color:
|
// options in color:
|
||||||
@ -107,7 +107,7 @@ class PartialPasteDlg : public Gtk::Dialog {
|
|||||||
sigc::connection everythingConn, basicConn, detailConn, colorConn, lensConn, compositionConn, metaicmConn, rawConn;;
|
sigc::connection everythingConn, basicConn, detailConn, colorConn, lensConn, compositionConn, metaicmConn, rawConn;;
|
||||||
|
|
||||||
sigc::connection wbConn, exposureConn, hlrecConn, shConn, labcurveConn;
|
sigc::connection wbConn, exposureConn, hlrecConn, shConn, labcurveConn;
|
||||||
sigc::connection sharpenConn, gradsharpenConn, microcontrastConn, impdenConn, dirpyrdenConn, waveqConn, defringeConn, edgePreservingDecompositionUIConn, dirpyreqConn;
|
sigc::connection sharpenConn, gradsharpenConn, microcontrastConn, impdenConn, dirpyrdenConn, waveqConn, defringeConn, epdConn, dirpyreqConn;
|
||||||
sigc::connection vibranceConn, chmixerConn, hsveqConn, rgbcurvesConn;
|
sigc::connection vibranceConn, chmixerConn, hsveqConn, rgbcurvesConn;
|
||||||
sigc::connection distortionConn, cacorrConn, vignettingConn;
|
sigc::connection distortionConn, cacorrConn, vignettingConn;
|
||||||
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, perspectiveConn, commonTransConn;
|
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, perspectiveConn, commonTransConn;
|
||||||
@ -116,9 +116,9 @@ class PartialPasteDlg : public Gtk::Dialog {
|
|||||||
sigc::connection raw_caredConn, raw_cablueConn, raw_ca_autocorrectConn, raw_hotdeadpix_filtConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_dmethodConn, raw_dcb_iterationsConn, raw_all_enhanceConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn;
|
sigc::connection raw_caredConn, raw_cablueConn, raw_ca_autocorrectConn, raw_hotdeadpix_filtConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_dmethodConn, raw_dcb_iterationsConn, raw_all_enhanceConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PartialPasteDlg ();
|
PartialPasteDlg (Glib::ustring title);
|
||||||
|
|
||||||
void applyPaste (rtengine::procparams::ProcParams* dst, const rtengine::procparams::ProcParams* src);
|
void applyPaste (rtengine::procparams::ProcParams* dstPP, ParamsEdited* dstPE, const rtengine::procparams::ProcParams* srcPP, const ParamsEdited* srcPE=NULL);
|
||||||
|
|
||||||
void everythingToggled ();
|
void everythingToggled ();
|
||||||
void basicToggled ();
|
void basicToggled ();
|
||||||
|
@ -57,7 +57,7 @@ void PreProcess::read(const rtengine::procparams::ProcParams* pp, const ParamsEd
|
|||||||
hdpixelconn.block (true);
|
hdpixelconn.block (true);
|
||||||
|
|
||||||
if(pedited ){
|
if(pedited ){
|
||||||
hotDeadPixel->set_inconsistent (!pedited->raw.hotDeadPixel);
|
hotDeadPixel->set_inconsistent (!pedited->raw.hotDeadPixelFilter);
|
||||||
lineDenoise->setEditedState( pedited->raw.linenoise ? Edited : UnEdited );
|
lineDenoise->setEditedState( pedited->raw.linenoise ? Edited : UnEdited );
|
||||||
greenEqThreshold->setEditedState( pedited->raw.greenEq ? Edited : UnEdited );
|
greenEqThreshold->setEditedState( pedited->raw.greenEq ? Edited : UnEdited );
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ void PreProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedi
|
|||||||
if (pedited) {
|
if (pedited) {
|
||||||
pedited->raw.linenoise = lineDenoise->getEditedState ();
|
pedited->raw.linenoise = lineDenoise->getEditedState ();
|
||||||
pedited->raw.greenEq= greenEqThreshold->getEditedState ();
|
pedited->raw.greenEq= greenEqThreshold->getEditedState ();
|
||||||
pedited->raw.hotDeadPixel = !hotDeadPixel->get_inconsistent();
|
pedited->raw.hotDeadPixelFilter = !hotDeadPixel->get_inconsistent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
class ProfileChangeListener {
|
class ProfileChangeListener {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual void profileChange (const rtengine::procparams::ProcParams* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited=NULL) {}
|
virtual void profileChange (const rtengine::procparams::PartialProfile* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited=NULL) {}
|
||||||
virtual void setDefaults (rtengine::procparams::ProcParams* defparams) {}
|
virtual void setDefaults (rtengine::procparams::ProcParams* defparams) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -29,7 +29,18 @@ using namespace rtengine::procparams;
|
|||||||
|
|
||||||
extern Glib::ustring argv0;
|
extern Glib::ustring argv0;
|
||||||
|
|
||||||
ProfilePanel::ProfilePanel () {
|
PartialPasteDlg* ProfilePanel::partialProfileDlg;
|
||||||
|
|
||||||
|
|
||||||
|
void ProfilePanel::init () {
|
||||||
|
partialProfileDlg = new PartialPasteDlg("Foo");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProfilePanel::cleanup () {
|
||||||
|
delete partialProfileDlg;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProfilePanel::ProfilePanel (bool readOnly) {
|
||||||
|
|
||||||
tpc = NULL;
|
tpc = NULL;
|
||||||
|
|
||||||
@ -40,25 +51,25 @@ ProfilePanel::ProfilePanel () {
|
|||||||
|
|
||||||
pack_start (*hbox, Gtk::PACK_SHRINK, 4);
|
pack_start (*hbox, Gtk::PACK_SHRINK, 4);
|
||||||
|
|
||||||
save = Gtk::manage (new Gtk::Button ());
|
|
||||||
save->add (*Gtk::manage (new RTImage ("gtk-save-large.png")));
|
|
||||||
load = Gtk::manage (new Gtk::Button ());
|
load = Gtk::manage (new Gtk::Button ());
|
||||||
load->add (*Gtk::manage (new RTImage ("gtk-open.png")));
|
load->add (*Gtk::manage (new RTImage ("gtk-open.png")));
|
||||||
copy = Gtk::manage (new Gtk::Button ());
|
if (!readOnly) save = Gtk::manage (new Gtk::Button ());
|
||||||
copy->add (*Gtk::manage (new RTImage ("edit-copy.png")));
|
if (!readOnly) save->add (*Gtk::manage (new RTImage ("gtk-save-large.png")));
|
||||||
|
if (!readOnly) copy = Gtk::manage (new Gtk::Button ());
|
||||||
|
if (!readOnly) copy->add (*Gtk::manage (new RTImage ("edit-copy.png")));
|
||||||
paste = Gtk::manage (new Gtk::Button ());
|
paste = Gtk::manage (new Gtk::Button ());
|
||||||
paste->add (*Gtk::manage (new RTImage ("edit-paste.png")));
|
paste->add (*Gtk::manage (new RTImage ("edit-paste.png")));
|
||||||
|
|
||||||
hbox->pack_start (*profiles);
|
hbox->pack_start (*profiles);
|
||||||
hbox->pack_start (*load, Gtk::PACK_SHRINK, 1);
|
hbox->pack_start (*load, Gtk::PACK_SHRINK, 1);
|
||||||
hbox->pack_start (*save, Gtk::PACK_SHRINK, 1);
|
if (!readOnly) hbox->pack_start (*save, Gtk::PACK_SHRINK, 1);
|
||||||
hbox->pack_start (*copy, Gtk::PACK_SHRINK, 1);
|
hbox->pack_start (*copy, Gtk::PACK_SHRINK, 1);
|
||||||
hbox->pack_start (*paste, Gtk::PACK_SHRINK, 1);
|
if (!readOnly) hbox->pack_start (*paste, Gtk::PACK_SHRINK, 1);
|
||||||
|
|
||||||
load->signal_clicked().connect( sigc::mem_fun(*this, &ProfilePanel::load_clicked) );
|
load->signal_button_release_event().connect_notify( sigc::mem_fun(*this, &ProfilePanel::load_clicked) );
|
||||||
save->signal_clicked().connect( sigc::mem_fun(*this, &ProfilePanel::save_clicked) );
|
if (!readOnly) save->signal_button_release_event().connect_notify( sigc::mem_fun(*this, &ProfilePanel::save_clicked) );
|
||||||
copy->signal_clicked().connect( sigc::mem_fun(*this, &ProfilePanel::copy_clicked) );
|
if (!readOnly) copy->signal_button_release_event().connect_notify( sigc::mem_fun(*this, &ProfilePanel::copy_clicked) );
|
||||||
paste->signal_clicked().connect( sigc::mem_fun(*this, &ProfilePanel::paste_clicked) );
|
paste->signal_button_release_event().connect_notify( sigc::mem_fun(*this, &ProfilePanel::paste_clicked) );
|
||||||
|
|
||||||
custom = NULL;
|
custom = NULL;
|
||||||
lastphoto = NULL;
|
lastphoto = NULL;
|
||||||
@ -71,9 +82,9 @@ ProfilePanel::ProfilePanel () {
|
|||||||
old = profiles->get_active_text();
|
old = profiles->get_active_text();
|
||||||
changeconn = profiles->signal_changed().connect( sigc::mem_fun(*this, &ProfilePanel::selection_changed) );
|
changeconn = profiles->signal_changed().connect( sigc::mem_fun(*this, &ProfilePanel::selection_changed) );
|
||||||
|
|
||||||
save->set_tooltip_text (M("PROFILEPANEL_TOOLTIPSAVE"));
|
|
||||||
load->set_tooltip_text (M("PROFILEPANEL_TOOLTIPLOAD"));
|
load->set_tooltip_text (M("PROFILEPANEL_TOOLTIPLOAD"));
|
||||||
copy->set_tooltip_text (M("PROFILEPANEL_TOOLTIPCOPY"));
|
if (!readOnly) save->set_tooltip_text (M("PROFILEPANEL_TOOLTIPSAVE"));
|
||||||
|
if (!readOnly) copy->set_tooltip_text (M("PROFILEPANEL_TOOLTIPCOPY"));
|
||||||
paste->set_tooltip_text (M("PROFILEPANEL_TOOLTIPPASTE"));
|
paste->set_tooltip_text (M("PROFILEPANEL_TOOLTIPPASTE"));
|
||||||
|
|
||||||
show_all_children ();
|
show_all_children ();
|
||||||
@ -81,9 +92,9 @@ ProfilePanel::ProfilePanel () {
|
|||||||
|
|
||||||
ProfilePanel::~ProfilePanel () {
|
ProfilePanel::~ProfilePanel () {
|
||||||
|
|
||||||
delete custom;
|
if (custom) { custom->deleteInstance(); delete custom; }
|
||||||
delete lastsaved;
|
if (lastsaved) { lastsaved->deleteInstance(); delete lastsaved; }
|
||||||
delete lastphoto;
|
if (lastphoto) { lastphoto->deleteInstance(); delete lastphoto; }
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfilePanel::refreshProfileList () {
|
void ProfilePanel::refreshProfileList () {
|
||||||
@ -98,7 +109,7 @@ void ProfilePanel::refreshProfileList () {
|
|||||||
// re-parse profile directories (deletes old ones)
|
// re-parse profile directories (deletes old ones)
|
||||||
profileStore.parseProfiles ();
|
profileStore.parseProfiles ();
|
||||||
pparams = profileStore.getProfileNames ();
|
pparams = profileStore.getProfileNames ();
|
||||||
for (int i=0; i<pparams.size(); i++)
|
for (unsigned int i=0; i<pparams.size(); i++)
|
||||||
profiles->append_text (pparams[i]);
|
profiles->append_text (pparams[i]);
|
||||||
|
|
||||||
if (custom)
|
if (custom)
|
||||||
@ -112,10 +123,15 @@ void ProfilePanel::refreshProfileList () {
|
|||||||
changeconn.block (false);
|
changeconn.block (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfilePanel::save_clicked () {
|
void ProfilePanel::save_clicked (GdkEventButton* event) {
|
||||||
|
|
||||||
|
if (event->button != 1)
|
||||||
|
return;
|
||||||
|
|
||||||
Gtk::FileChooserDialog dialog(M("PROFILEPANEL_SAVEDLGLABEL"), Gtk::FILE_CHOOSER_ACTION_SAVE);
|
Gtk::FileChooserDialog dialog(M("PROFILEPANEL_SAVEDLGLABEL"), Gtk::FILE_CHOOSER_ACTION_SAVE);
|
||||||
if (options.multiUser)
|
if (options.loadSaveProfilePath.length())
|
||||||
|
dialog.set_current_folder (options.loadSaveProfilePath);
|
||||||
|
else if (options.multiUser)
|
||||||
dialog.set_current_folder (Options::rtdir + "/" + options.profilePath);
|
dialog.set_current_folder (Options::rtdir + "/" + options.profilePath);
|
||||||
else
|
else
|
||||||
dialog.set_current_folder (argv0 + "/" + options.profilePath);
|
dialog.set_current_folder (argv0 + "/" + options.profilePath);
|
||||||
@ -140,11 +156,15 @@ void ProfilePanel::save_clicked () {
|
|||||||
|
|
||||||
savedialog = &dialog;
|
savedialog = &dialog;
|
||||||
|
|
||||||
|
bool done = false;
|
||||||
|
do {
|
||||||
int result = dialog.run();
|
int result = dialog.run();
|
||||||
|
dialog.hide();
|
||||||
|
|
||||||
if (result==Gtk::RESPONSE_OK) {
|
if (result==Gtk::RESPONSE_OK) {
|
||||||
|
|
||||||
std::string fname = dialog.get_filename();
|
std::string fname = dialog.get_filename();
|
||||||
|
options.loadSaveProfilePath = Glib::path_get_dirname(fname);
|
||||||
|
|
||||||
bool hasext = true;
|
bool hasext = true;
|
||||||
int dotpos = fname.find_last_of ('.');
|
int dotpos = fname.find_last_of ('.');
|
||||||
@ -165,10 +185,11 @@ void ProfilePanel::save_clicked () {
|
|||||||
Gtk::MessageDialog msgd (msg_, true, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_YES_NO, true);
|
Gtk::MessageDialog msgd (msg_, true, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_YES_NO, true);
|
||||||
int response = msgd.run ();
|
int response = msgd.run ();
|
||||||
if (response==Gtk::RESPONSE_NO)
|
if (response==Gtk::RESPONSE_NO)
|
||||||
return;
|
// make another try
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProcParams* toSave = NULL;
|
PartialProfile* toSave = NULL;
|
||||||
if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")")
|
if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")")
|
||||||
toSave = custom;
|
toSave = custom;
|
||||||
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTSAVED") + ")")
|
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTSAVED") + ")")
|
||||||
@ -179,15 +200,41 @@ void ProfilePanel::save_clicked () {
|
|||||||
toSave = profileStore.getProfile (profiles->get_active_text());
|
toSave = profileStore.getProfile (profiles->get_active_text());
|
||||||
|
|
||||||
if (toSave) {
|
if (toSave) {
|
||||||
toSave->save (fname);
|
if (event->state & Gdk::CONTROL_MASK) {
|
||||||
|
// opening the partial paste dialog window
|
||||||
|
partialProfileDlg->set_title(M("PROFILEPANEL_SAVEPPASTE"));
|
||||||
|
int i = partialProfileDlg->run();
|
||||||
|
partialProfileDlg->hide();
|
||||||
|
if (i != Gtk::RESPONSE_OK)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// saving the partial profile
|
||||||
|
PartialProfile ppTemp(true);
|
||||||
|
partialProfileDlg->applyPaste (ppTemp.pparams, ppTemp.pedited, toSave->pparams, toSave->pedited);
|
||||||
|
ppTemp.pparams->save (fname, "", ppTemp.pedited);
|
||||||
|
ppTemp.deleteInstance();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// saving a full profile
|
||||||
|
toSave->pparams->save (fname);
|
||||||
|
}
|
||||||
refreshProfileList ();
|
refreshProfileList ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
done = true;
|
||||||
|
} while (!done);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfilePanel::copy_clicked () {
|
/*
|
||||||
|
* Copy the actual full profile to the clipboard
|
||||||
|
*/
|
||||||
|
void ProfilePanel::copy_clicked (GdkEventButton* event) {
|
||||||
|
|
||||||
ProcParams* toSave = NULL;
|
if (event->button != 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
PartialProfile* toSave = NULL;
|
||||||
if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")")
|
if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")")
|
||||||
toSave = custom;
|
toSave = custom;
|
||||||
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTSAVED") + ")")
|
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTSAVED") + ")")
|
||||||
@ -197,14 +244,40 @@ void ProfilePanel::copy_clicked () {
|
|||||||
else
|
else
|
||||||
toSave = profileStore.getProfile (profiles->get_active_text());
|
toSave = profileStore.getProfile (profiles->get_active_text());
|
||||||
|
|
||||||
if (toSave)
|
// toSave has to be a complete procparams
|
||||||
clipboard.setProcParams (*toSave);
|
if (toSave) {
|
||||||
|
if (event->state & Gdk::CONTROL_MASK) {
|
||||||
|
// opening the partial paste dialog window
|
||||||
|
partialProfileDlg->set_title(M("PROFILEPANEL_COPYPPASTE"));
|
||||||
|
int i = partialProfileDlg->run();
|
||||||
|
partialProfileDlg->hide();
|
||||||
|
if (i != Gtk::RESPONSE_OK)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// saving a partial profile
|
||||||
|
PartialProfile ppTemp(true);
|
||||||
|
partialProfileDlg->applyPaste (ppTemp.pparams, ppTemp.pedited, toSave->pparams, toSave->pedited);
|
||||||
|
clipboard.setPartialProfile(ppTemp);
|
||||||
|
ppTemp.deleteInstance();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
clipboard.setProcParams (*toSave->pparams);
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfilePanel::load_clicked () {
|
/*
|
||||||
|
* Load a potentially partial profile
|
||||||
|
*/
|
||||||
|
void ProfilePanel::load_clicked (GdkEventButton* event) {
|
||||||
|
|
||||||
|
if (event->button != 1)
|
||||||
|
return;
|
||||||
|
|
||||||
Gtk::FileChooserDialog dialog(M("PROFILEPANEL_LOADDLGLABEL"), Gtk::FILE_CHOOSER_ACTION_OPEN);
|
Gtk::FileChooserDialog dialog(M("PROFILEPANEL_LOADDLGLABEL"), Gtk::FILE_CHOOSER_ACTION_OPEN);
|
||||||
if (options.multiUser)
|
if (options.loadSaveProfilePath.length())
|
||||||
|
dialog.set_current_folder (options.loadSaveProfilePath);
|
||||||
|
else if (options.multiUser)
|
||||||
dialog.set_current_folder (Options::rtdir + "/" + options.profilePath);
|
dialog.set_current_folder (Options::rtdir + "/" + options.profilePath);
|
||||||
else
|
else
|
||||||
dialog.set_current_folder (argv0 + "/" + options.profilePath);
|
dialog.set_current_folder (argv0 + "/" + options.profilePath);
|
||||||
@ -226,65 +299,100 @@ void ProfilePanel::load_clicked () {
|
|||||||
dialog.add_filter(filter_any);
|
dialog.add_filter(filter_any);
|
||||||
|
|
||||||
int result = dialog.run();
|
int result = dialog.run();
|
||||||
|
dialog.hide();
|
||||||
|
|
||||||
if (result==Gtk::RESPONSE_OK) {
|
if (result==Gtk::RESPONSE_OK) {
|
||||||
if (!custom) {
|
bool prevState = changeconn.block(true);
|
||||||
custom = new ProcParams ();
|
Glib::ustring fname = dialog.get_filename();
|
||||||
profiles->append_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
options.loadSaveProfilePath = Glib::path_get_dirname(fname);
|
||||||
|
|
||||||
|
if (event->state & Gdk::CONTROL_MASK) {
|
||||||
|
// opening the partial paste dialog window
|
||||||
|
partialProfileDlg->set_title(M("PROFILEPANEL_LOADPPASTE"));
|
||||||
|
int i = partialProfileDlg->run();
|
||||||
|
partialProfileDlg->hide();
|
||||||
|
if (i != Gtk::RESPONSE_OK)
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
custom->load (dialog.get_filename());
|
bool customCreated = false;
|
||||||
|
if (!custom) {
|
||||||
|
custom = new PartialProfile (true);
|
||||||
|
custom->set(true);
|
||||||
|
customCreated = true;
|
||||||
|
}
|
||||||
|
int err = custom->load (fname);
|
||||||
|
if (!err) {
|
||||||
|
profiles->append_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
||||||
profiles->set_active_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
profiles->set_active_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
||||||
old = profiles->get_active_text();
|
old = profiles->get_active_text();
|
||||||
|
changeconn.block(prevState);
|
||||||
|
|
||||||
|
if (event->state & Gdk::CONTROL_MASK) {
|
||||||
|
// applying partial profile
|
||||||
|
PartialProfile ppTemp(true);
|
||||||
|
// the 2 next line modify custom->pedited without modifying custom->pparams
|
||||||
|
partialProfileDlg->applyPaste (ppTemp.pparams, ppTemp.pedited, custom->pparams, custom->pedited);
|
||||||
|
*custom->pedited = *ppTemp.pedited;
|
||||||
|
ppTemp.deleteInstance();
|
||||||
|
}
|
||||||
|
|
||||||
changeTo (custom, M("PROFILEPANEL_PFILE"));
|
changeTo (custom, M("PROFILEPANEL_PFILE"));
|
||||||
}
|
}
|
||||||
|
else if (customCreated) {
|
||||||
|
// we delete custom
|
||||||
|
custom->deleteInstance();
|
||||||
|
delete custom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfilePanel::paste_clicked () {
|
/*
|
||||||
|
* Paste a full profile from the clipboard
|
||||||
|
*/
|
||||||
|
void ProfilePanel::paste_clicked (GdkEventButton* event) {
|
||||||
|
|
||||||
|
if (event->button != 1)
|
||||||
|
return;
|
||||||
if (!clipboard.hasProcParams())
|
if (!clipboard.hasProcParams())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (event->state & Gdk::CONTROL_MASK) {
|
||||||
|
partialProfileDlg->set_title(M("PROFILEPANEL_PASTEPPASTE"));
|
||||||
|
int i = partialProfileDlg->run();
|
||||||
|
partialProfileDlg->hide();
|
||||||
|
if (i != Gtk::RESPONSE_OK)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!custom) {
|
if (!custom) {
|
||||||
custom = new ProcParams ();
|
custom = new PartialProfile (true);
|
||||||
|
custom->pedited->set(true);
|
||||||
profiles->append_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
profiles->append_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
||||||
}
|
}
|
||||||
*custom = clipboard.getProcParams ();
|
ProcParams pp = clipboard.getProcParams ();
|
||||||
|
custom->pparams = &pp;
|
||||||
profiles->set_active_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
profiles->set_active_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
||||||
old = profiles->get_active_text();
|
old = profiles->get_active_text();
|
||||||
|
|
||||||
|
if (event->state & Gdk::CONTROL_MASK) {
|
||||||
|
// applying partial profile
|
||||||
|
PartialProfile ppTemp(true);
|
||||||
|
// the 2 next line modify custom->pedited without modifying custom->pparams
|
||||||
|
partialProfileDlg->applyPaste (ppTemp.pparams, ppTemp.pedited, custom->pparams, custom->pedited);
|
||||||
|
*custom->pedited = *ppTemp.pedited;
|
||||||
|
ppTemp.deleteInstance();
|
||||||
|
}
|
||||||
|
|
||||||
changeTo (custom, M("HISTORY_FROMCLIPBOARD"));
|
changeTo (custom, M("HISTORY_FROMCLIPBOARD"));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfilePanel::changeTo (ProcParams* newpp, Glib::ustring profname) {
|
void ProfilePanel::changeTo (PartialProfile* newpp, Glib::ustring profname) {
|
||||||
|
|
||||||
if (!newpp)
|
if (!newpp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Keep transformation parameters while changing the profile
|
|
||||||
|
|
||||||
/* int cropx = working->crop_x;
|
|
||||||
int cropy = working->crop_y;
|
|
||||||
int cropw = working->crop_w;
|
|
||||||
int croph = working->crop_h;
|
|
||||||
bool crope = working->crop_enabled;
|
|
||||||
int rotcor = working->rotate_coarse;
|
|
||||||
double rotfine = working->rotate_fine;
|
|
||||||
double lenscorr = working->lens_distortion;
|
|
||||||
bool hflip = working->horizontal_flip;
|
|
||||||
bool vflip = working->vertical_flip;
|
|
||||||
|
|
||||||
working->copy (newpp);
|
|
||||||
|
|
||||||
working->crop_x = cropx;
|
|
||||||
working->crop_y = cropy;
|
|
||||||
working->crop_w = cropw;
|
|
||||||
working->crop_h = croph;
|
|
||||||
working->crop_enabled = crope;
|
|
||||||
working->rotate_coarse = rotcor;
|
|
||||||
working->rotate_fine = rotfine;
|
|
||||||
working->lens_distortion = lenscorr;
|
|
||||||
working->horizontal_flip = hflip;
|
|
||||||
working->vertical_flip = vflip;
|
|
||||||
*/
|
|
||||||
if (tpc)
|
if (tpc)
|
||||||
tpc->profileChange (newpp, EvProfileChanged, profname);
|
tpc->profileChange (newpp, EvProfileChanged, profname);
|
||||||
}
|
}
|
||||||
@ -300,7 +408,7 @@ void ProfilePanel::selection_changed () {
|
|||||||
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTPHOTO") + ")")
|
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTPHOTO") + ")")
|
||||||
changeTo (lastphoto, Glib::ustring("(") + M("PROFILEPANEL_PLASTPHOTO") + ")");
|
changeTo (lastphoto, Glib::ustring("(") + M("PROFILEPANEL_PLASTPHOTO") + ")");
|
||||||
else {
|
else {
|
||||||
ProcParams* s = profileStore.getProfile (profiles->get_active_text());
|
PartialProfile* s = profileStore.getProfile (profiles->get_active_text());
|
||||||
if (s)
|
if (s)
|
||||||
changeTo (s, profiles->get_active_text());
|
changeTo (s, profiles->get_active_text());
|
||||||
}
|
}
|
||||||
@ -310,24 +418,26 @@ void ProfilePanel::selection_changed () {
|
|||||||
|
|
||||||
void ProfilePanel::procParamsChanged (rtengine::procparams::ProcParams* p, rtengine::ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited) {
|
void ProfilePanel::procParamsChanged (rtengine::procparams::ProcParams* p, rtengine::ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited) {
|
||||||
|
|
||||||
// to prevent recursion filter out the events caused by the profilepanel
|
// to prevent recursion, filter out the events caused by the profilepanel
|
||||||
if (ev==EvProfileChanged || ev==EvPhotoLoaded)
|
if (ev==EvProfileChanged || ev==EvPhotoLoaded)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (profiles->get_active_text() != Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")") {
|
if (profiles->get_active_text() != Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")") {
|
||||||
dontupdate = true;
|
dontupdate = true;
|
||||||
if (!custom) {
|
if (!custom) {
|
||||||
custom = new ProcParams ();
|
custom = new PartialProfile (true);
|
||||||
|
custom->set(true);
|
||||||
profiles->append_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
profiles->append_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
||||||
}
|
}
|
||||||
*custom = *p;
|
|
||||||
profiles->set_active_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
profiles->set_active_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
||||||
old = profiles->get_active_text();
|
old = profiles->get_active_text();
|
||||||
}
|
}
|
||||||
else
|
*(custom->pparams) = *p;
|
||||||
*custom = *p;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO: "lastPhoto" is not used anymore, a code cleanup should delete everything related to it
|
||||||
|
*/
|
||||||
void ProfilePanel::initProfile (const Glib::ustring& profname, ProcParams* lastSaved, ProcParams* lastPhoto) {
|
void ProfilePanel::initProfile (const Glib::ustring& profname, ProcParams* lastSaved, ProcParams* lastPhoto) {
|
||||||
|
|
||||||
changeconn.block (true);
|
changeconn.block (true);
|
||||||
@ -336,18 +446,36 @@ void ProfilePanel::initProfile (const Glib::ustring& profname, ProcParams* lastS
|
|||||||
pparams.clear ();
|
pparams.clear ();
|
||||||
|
|
||||||
pparams = profileStore.getProfileNames ();
|
pparams = profileStore.getProfileNames ();
|
||||||
for (int i=0; i<pparams.size(); i++)
|
for (unsigned int i=0; i<pparams.size(); i++)
|
||||||
profiles->append_text (pparams[i]);
|
profiles->append_text (pparams[i]);
|
||||||
|
|
||||||
delete custom;
|
if (custom) {
|
||||||
custom = NULL;
|
custom->deleteInstance();
|
||||||
delete lastsaved;
|
delete custom; custom = NULL;
|
||||||
lastsaved = lastSaved;
|
}
|
||||||
delete lastphoto;
|
|
||||||
lastphoto = lastPhoto;
|
if (lastsaved) {
|
||||||
|
lastsaved->deleteInstance();
|
||||||
|
delete lastsaved; lastsaved = NULL;
|
||||||
|
}
|
||||||
|
if (lastSaved) {
|
||||||
|
ParamsEdited* pe = new ParamsEdited();
|
||||||
|
pe->set(true);
|
||||||
|
lastsaved = new PartialProfile(lastSaved, pe);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastphoto) {
|
||||||
|
lastphoto->deleteInstance();
|
||||||
|
delete lastphoto; lastphoto = NULL;
|
||||||
|
}
|
||||||
|
if (lastPhoto) {
|
||||||
|
ParamsEdited* pe = new ParamsEdited();
|
||||||
|
pe->set(true);
|
||||||
|
lastphoto = new PartialProfile(lastPhoto, pe);
|
||||||
|
}
|
||||||
|
|
||||||
Glib::ustring defline = profname;
|
Glib::ustring defline = profname;
|
||||||
ProcParams* defprofile = profileStore.getProfile (profname);
|
PartialProfile* defprofile = profileStore.getProfile (profname);
|
||||||
|
|
||||||
if (lastphoto)
|
if (lastphoto)
|
||||||
profiles->append_text (Glib::ustring("(") + M("PROFILEPANEL_PLASTPHOTO") + ")");
|
profiles->append_text (Glib::ustring("(") + M("PROFILEPANEL_PLASTPHOTO") + ")");
|
||||||
@ -360,9 +488,9 @@ void ProfilePanel::initProfile (const Glib::ustring& profname, ProcParams* lastS
|
|||||||
|
|
||||||
if (tpc) {
|
if (tpc) {
|
||||||
if (lastsaved)
|
if (lastsaved)
|
||||||
tpc->setDefaults (lastsaved);
|
tpc->setDefaults (lastsaved->pparams);
|
||||||
else
|
else
|
||||||
tpc->setDefaults (profileStore.getProfile (profname));
|
tpc->setDefaults (profileStore.getProfile (profname)->pparams);
|
||||||
}
|
}
|
||||||
if (defprofile) {
|
if (defprofile) {
|
||||||
old = defline;
|
old = defline;
|
||||||
@ -372,16 +500,26 @@ void ProfilePanel::initProfile (const Glib::ustring& profname, ProcParams* lastS
|
|||||||
tpc->profileChange (defprofile, EvPhotoLoaded, defline);
|
tpc->profileChange (defprofile, EvPhotoLoaded, defline);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
bool dels = false;
|
||||||
// select first valid profile
|
// select first valid profile
|
||||||
old = "";
|
old = "";
|
||||||
profiles->set_active (0);
|
profiles->set_active (0);
|
||||||
ProcParams* s = profileStore.getProfile (profiles->get_active_text());
|
PartialProfile* s = profileStore.getProfile (profiles->get_active_text());
|
||||||
if (!s)
|
if (!s) {
|
||||||
s = new ProcParams ();
|
s = new PartialProfile (true);
|
||||||
|
s->set(true);
|
||||||
|
dels = true; // we've created a temporary PartialProfile, so we set a flag to destroy it
|
||||||
|
}
|
||||||
changeconn.block (false);
|
changeconn.block (false);
|
||||||
if (tpc)
|
if (tpc)
|
||||||
tpc->profileChange (s, EvPhotoLoaded, profiles->get_active_text());
|
tpc->profileChange (s, EvPhotoLoaded, profiles->get_active_text());
|
||||||
|
|
||||||
|
if (dels) {
|
||||||
|
s->deleteInstance();
|
||||||
|
delete s;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,47 +24,52 @@
|
|||||||
#include "../rtengine/rtengine.h"
|
#include "../rtengine/rtengine.h"
|
||||||
#include "pparamschangelistener.h"
|
#include "pparamschangelistener.h"
|
||||||
#include "profilechangelistener.h"
|
#include "profilechangelistener.h"
|
||||||
|
#include "partialpastedlg.h"
|
||||||
#include "guiutils.h"
|
#include "guiutils.h"
|
||||||
|
|
||||||
class ProfilePanel : public Gtk::VBox, public PParamsChangeListener {
|
class ProfilePanel : public Gtk::VBox, public PParamsChangeListener {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
static PartialPasteDlg* partialProfileDlg;
|
||||||
Gtk::Button* save;
|
Gtk::Button* save;
|
||||||
Gtk::Button* load;
|
Gtk::Button* load;
|
||||||
Gtk::Button* copy;
|
Gtk::Button* copy;
|
||||||
Gtk::Button* paste;
|
Gtk::Button* paste;
|
||||||
MyComboBoxText* profiles;
|
MyComboBoxText* profiles;
|
||||||
std::vector<Glib::ustring> pparams;
|
std::vector<Glib::ustring> pparams;
|
||||||
rtengine::procparams::ProcParams* custom;
|
rtengine::procparams::PartialProfile* custom;
|
||||||
rtengine::procparams::ProcParams* lastsaved;
|
rtengine::procparams::PartialProfile* lastsaved;
|
||||||
rtengine::procparams::ProcParams* lastphoto;
|
rtengine::procparams::PartialProfile* lastphoto;
|
||||||
Glib::ustring old;
|
Glib::ustring old;
|
||||||
ProfileChangeListener* tpc;
|
ProfileChangeListener* tpc;
|
||||||
bool dontupdate;
|
bool dontupdate;
|
||||||
sigc::connection changeconn;
|
sigc::connection changeconn;
|
||||||
Gtk::FileChooserDialog* savedialog;
|
Gtk::FileChooserDialog* savedialog;
|
||||||
|
|
||||||
void changeTo (rtengine::procparams::ProcParams* newpp, Glib::ustring profname);
|
void changeTo (rtengine::procparams::PartialProfile* newpp, Glib::ustring profname);
|
||||||
void refreshProfileList ();
|
void refreshProfileList ();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ProfilePanel ();
|
ProfilePanel (bool readOnly=false);
|
||||||
virtual ~ProfilePanel ();
|
virtual ~ProfilePanel ();
|
||||||
|
|
||||||
void setProfileChangeListener (ProfileChangeListener* ppl) { tpc = ppl; }
|
void setProfileChangeListener (ProfileChangeListener* ppl) { tpc = ppl; }
|
||||||
|
|
||||||
|
static void init ();
|
||||||
|
static void cleanup ();
|
||||||
|
|
||||||
void initProfile (const Glib::ustring& profname, rtengine::procparams::ProcParams* lastSaved, rtengine::procparams::ProcParams* lastPhoto);
|
void initProfile (const Glib::ustring& profname, rtengine::procparams::ProcParams* lastSaved, rtengine::procparams::ProcParams* lastPhoto);
|
||||||
|
|
||||||
// PParamsChangeListener interface
|
// PParamsChangeListener interface
|
||||||
void procParamsChanged (rtengine::procparams::ProcParams* params, rtengine::ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited=NULL);
|
void procParamsChanged (rtengine::procparams::ProcParams* params, rtengine::ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited=NULL);
|
||||||
|
|
||||||
// gui callbacks
|
// gui callbacks
|
||||||
void save_clicked ();
|
void save_clicked (GdkEventButton* event);
|
||||||
void load_clicked ();
|
void load_clicked (GdkEventButton* event);
|
||||||
void copy_clicked ();
|
void copy_clicked (GdkEventButton* event);
|
||||||
void paste_clicked ();
|
void paste_clicked (GdkEventButton* event);
|
||||||
void selection_changed ();
|
void selection_changed ();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,12 +28,23 @@ using namespace rtengine::procparams;
|
|||||||
|
|
||||||
extern Glib::ustring argv0;
|
extern Glib::ustring argv0;
|
||||||
|
|
||||||
|
ProfileStore::~ProfileStore () {
|
||||||
|
for (std::map<Glib::ustring,PartialProfile*>::iterator i = partProfiles.begin(); i!=partProfiles.end(); i++) {
|
||||||
|
if (i->second->pparams) delete i->second->pparams;
|
||||||
|
if (i->second->pedited) delete i->second->pedited;
|
||||||
|
delete i->second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ProfileStore::parseProfiles () {
|
void ProfileStore::parseProfiles () {
|
||||||
|
|
||||||
// clear loaded profiles
|
// clear loaded profiles
|
||||||
for (std::map<Glib::ustring,ProcParams*>::iterator i = pparams.begin(); i!=pparams.end(); i++)
|
for (std::map<Glib::ustring,PartialProfile*>::iterator i = partProfiles.begin(); i!=partProfiles.end(); i++) {
|
||||||
|
delete i->second->pparams;
|
||||||
|
delete i->second->pedited;
|
||||||
delete i->second;
|
delete i->second;
|
||||||
pparams.clear ();
|
}
|
||||||
|
partProfiles.clear ();
|
||||||
|
|
||||||
if (options.multiUser) {
|
if (options.multiUser) {
|
||||||
Glib::ustring userPD = options.rtdir + "/" + options.profilePath;
|
Glib::ustring userPD = options.rtdir + "/" + options.profilePath;
|
||||||
@ -68,16 +79,21 @@ void ProfileStore::parseDir (const Glib::ustring& pdir) {
|
|||||||
if( options.rtSettings.verbose )
|
if( options.rtSettings.verbose )
|
||||||
printf ("Processing file %s...\n", fname.c_str());
|
printf ("Processing file %s...\n", fname.c_str());
|
||||||
Glib::ustring name = sname.substr(0,lastdot);
|
Glib::ustring name = sname.substr(0,lastdot);
|
||||||
if (pparams.find(name)!=pparams.end()) {
|
std::map<Glib::ustring,PartialProfile*>::iterator j = partProfiles.find(name);
|
||||||
delete pparams[name];
|
if (j!=partProfiles.end()) {
|
||||||
pparams.erase (pparams.find(name));
|
j->second->deleteInstance();
|
||||||
|
delete j->second;
|
||||||
|
partProfiles.erase (j);
|
||||||
|
}
|
||||||
|
PartialProfile* pProf = new PartialProfile (true);
|
||||||
|
int res = pProf->load (fname);
|
||||||
|
if (!res && pProf->pparams->ppVersion>=220) {
|
||||||
|
partProfiles[name] = pProf;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pProf->deleteInstance();
|
||||||
|
delete pProf;
|
||||||
}
|
}
|
||||||
ProcParams* pp = new ProcParams ();
|
|
||||||
int res = pp->load (fname);
|
|
||||||
if (!res && pp->ppVersion>=220)
|
|
||||||
pparams[name] = pp;
|
|
||||||
else
|
|
||||||
delete pp;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -85,26 +101,31 @@ void ProfileStore::parseDir (const Glib::ustring& pdir) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rtengine::procparams::ProcParams* ProfileStore::getProfile (const Glib::ustring& profname) {
|
PartialProfile* ProfileStore::getProfile (const Glib::ustring& profname) {
|
||||||
|
|
||||||
return pparams[profname];
|
std::map<Glib::ustring, PartialProfile*>::iterator prof = partProfiles.find(profname);
|
||||||
|
if (prof != partProfiles.end())
|
||||||
|
return partProfiles[profname];
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Glib::ustring> ProfileStore::getProfileNames () {
|
std::vector<Glib::ustring> ProfileStore::getProfileNames () {
|
||||||
|
|
||||||
std::vector<Glib::ustring> ret;
|
std::vector<Glib::ustring> ret;
|
||||||
for (std::map<Glib::ustring,ProcParams*>::iterator i = pparams.begin(); i!=pparams.end(); i++)
|
for (std::map<Glib::ustring,PartialProfile*>::iterator i = partProfiles.begin(); i!=partProfiles.end(); i++)
|
||||||
ret.push_back (i->first);
|
ret.push_back (i->first);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
rtengine::procparams::ProcParams* ProfileStore::getDefaultProcParams (bool isRaw) {
|
ProcParams* ProfileStore::getDefaultProcParams (bool isRaw) {
|
||||||
|
|
||||||
rtengine::procparams::ProcParams* pp = getProfile (isRaw ? options.defProfRaw : options.defProfImg);
|
PartialProfile* pProf = getProfile (isRaw ? options.defProfRaw : options.defProfImg);
|
||||||
if (!pp) {
|
if (!pProf) {
|
||||||
pp = new ProcParams ();
|
Glib::ustring profName = isRaw ? options.defProfRaw : options.defProfImg;
|
||||||
pparams[isRaw ? options.defProfRaw : options.defProfImg] = pp;
|
pProf = new PartialProfile (true);
|
||||||
|
partProfiles[profName] = pProf;
|
||||||
}
|
}
|
||||||
return pp;
|
return pProf->pparams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,17 +22,19 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "../rtengine/rtengine.h"
|
#include "../rtengine/rtengine.h"
|
||||||
|
#include "paramsedited.h"
|
||||||
#include <glibmm.h>
|
#include <glibmm.h>
|
||||||
|
|
||||||
class ProfileStore {
|
class ProfileStore {
|
||||||
|
|
||||||
std::map<Glib::ustring,rtengine::procparams::ProcParams*> pparams;
|
std::map<Glib::ustring, rtengine::procparams::PartialProfile*> partProfiles;
|
||||||
void parseDir (const Glib::ustring& pdir);
|
void parseDir (const Glib::ustring& pdir);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
~ProfileStore();
|
||||||
void parseProfiles ();
|
void parseProfiles ();
|
||||||
rtengine::procparams::ProcParams* getProfile (const Glib::ustring& profname);
|
rtengine::procparams::PartialProfile* getProfile (const Glib::ustring& profname);
|
||||||
std::vector<Glib::ustring> getProfileNames ();
|
std::vector<Glib::ustring> getProfileNames ();
|
||||||
rtengine::procparams::ProcParams* getDefaultProcParams (bool isRaw);
|
rtengine::procparams::ProcParams* getDefaultProcParams (bool isRaw);
|
||||||
};
|
};
|
||||||
|
@ -34,6 +34,7 @@ RTWindow::RTWindow ()
|
|||||||
|
|
||||||
cacheMgr->init ();
|
cacheMgr->init ();
|
||||||
WhiteBalance::init();
|
WhiteBalance::init();
|
||||||
|
ProfilePanel::init();
|
||||||
|
|
||||||
Glib::ustring fName = "rt-logo.png";
|
Glib::ustring fName = "rt-logo.png";
|
||||||
Glib::ustring fullPath = RTImage::findIconAbsolutePath(fName);
|
Glib::ustring fullPath = RTImage::findIconAbsolutePath(fName);
|
||||||
@ -450,6 +451,7 @@ bool RTWindow::on_delete_event(GdkEventAny* event) {
|
|||||||
|
|
||||||
cacheMgr->closeCache (); // also makes cleanup if too large
|
cacheMgr->closeCache (); // also makes cleanup if too large
|
||||||
WhiteBalance::cleanup();
|
WhiteBalance::cleanup();
|
||||||
|
ProfilePanel::cleanup();
|
||||||
|
|
||||||
|
|
||||||
if (!options.windowMaximized) {
|
if (!options.windowMaximized) {
|
||||||
|
@ -174,7 +174,10 @@ const ProcParams& Thumbnail::getProcParams () {
|
|||||||
return pparams; // there is no valid pp to return, but we have to return something
|
return pparams; // there is no valid pp to return, but we have to return something
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create default params on demand and returns a new updatable object
|
/*
|
||||||
|
* Create default params on demand and returns a new updatable object
|
||||||
|
* The loaded profile may be partial, but it return a complete ProcParams (i.e. without ParamsEdited)
|
||||||
|
*/
|
||||||
rtengine::procparams::ProcParams* Thumbnail::createProcParamsForUpdate(bool returnParams, bool forceCPB) {
|
rtengine::procparams::ProcParams* Thumbnail::createProcParamsForUpdate(bool returnParams, bool forceCPB) {
|
||||||
// try to load the last saved parameters from the cache or from the paramfile file
|
// try to load the last saved parameters from the cache or from the paramfile file
|
||||||
ProcParams* ldprof = NULL;
|
ProcParams* ldprof = NULL;
|
||||||
@ -195,7 +198,7 @@ rtengine::procparams::ProcParams* Thumbnail::createProcParamsForUpdate(bool retu
|
|||||||
|
|
||||||
bool success = safe_spawn_command_line_sync (cmdLine + strm.str());
|
bool success = safe_spawn_command_line_sync (cmdLine + strm.str());
|
||||||
|
|
||||||
// Now they SHOULD be there, so try to load them
|
// Now they SHOULD be there (and potentially "partial"), so try to load them and store it as a full procparam
|
||||||
if (success) loadProcParams();
|
if (success) loadProcParams();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,6 +215,14 @@ void Thumbnail::notifylisterners_procParamsChanged(int whoChangedIt){
|
|||||||
listeners[i]->procParamsChanged (this, whoChangedIt);
|
listeners[i]->procParamsChanged (this, whoChangedIt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Load the procparams from the cache or from the sidecar file (priority set in
|
||||||
|
* the Preferences).
|
||||||
|
*
|
||||||
|
* The result is a complete ProcParams with default values merged with the values
|
||||||
|
* from the default Raw or Image ProcParams, then with the values from the loaded
|
||||||
|
* ProcParams (sidecar or cache file).
|
||||||
|
*/
|
||||||
void Thumbnail::loadProcParams () {
|
void Thumbnail::loadProcParams () {
|
||||||
// TODO: Check for Linux
|
// TODO: Check for Linux
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@ -219,17 +230,22 @@ void Thumbnail::loadProcParams () {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
pparamsValid = false;
|
pparamsValid = false;
|
||||||
|
pparams.setDefaults();
|
||||||
|
// WARNING: loading the default Raw or Img pp3 file at each thumbnail may be a performance bottleneck
|
||||||
|
pparams.load(options.profilePath+"/" + (getType()==FT_Raw?options.defProfRaw:options.defProfImg) + paramFileExtension);
|
||||||
|
|
||||||
if (options.paramsLoadLocation==PLL_Input) {
|
if (options.paramsLoadLocation==PLL_Input) {
|
||||||
// try to load it from params file next to the image file
|
// try to load it from params file next to the image file
|
||||||
int ppres = pparams.load (fname + paramFileExtension);
|
int ppres = pparams.load (fname + paramFileExtension);
|
||||||
pparamsValid = !ppres && pparams.ppVersion>=220;
|
pparamsValid = !ppres && pparams.ppVersion>=220;
|
||||||
|
// if no success, try to load the cached version of the procparams
|
||||||
if (!pparamsValid)
|
if (!pparamsValid)
|
||||||
pparamsValid = !pparams.load (getCacheFileName ("profiles")+paramFileExtension);
|
pparamsValid = !pparams.load (getCacheFileName ("profiles")+paramFileExtension);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// try to load it from cache
|
// try to load it from cache
|
||||||
pparamsValid = !pparams.load (getCacheFileName ("profiles")+paramFileExtension);
|
pparamsValid = !pparams.load (getCacheFileName ("profiles")+paramFileExtension);
|
||||||
// if no success, load it from params file next to the image file
|
// if no success, try to load it from params file next to the image file
|
||||||
if (!pparamsValid) {
|
if (!pparamsValid) {
|
||||||
int ppres = pparams.load (fname + paramFileExtension);
|
int ppres = pparams.load (fname + paramFileExtension);
|
||||||
pparamsValid = !ppres && pparams.ppVersion>=220;
|
pparamsValid = !ppres && pparams.ppVersion>=220;
|
||||||
@ -304,7 +320,7 @@ bool Thumbnail::hasProcParams () {
|
|||||||
return pparamsValid;
|
return pparamsValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Thumbnail::setProcParams (const ProcParams& pp, int whoChangedIt, bool updateCacheNow) {
|
void Thumbnail::setProcParams (const ProcParams& pp, ParamsEdited* pe, int whoChangedIt, bool updateCacheNow) {
|
||||||
// TODO: Check for Linux
|
// TODO: Check for Linux
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
Glib::Mutex::Lock lock(mutex);
|
Glib::Mutex::Lock lock(mutex);
|
||||||
@ -318,7 +334,13 @@ void Thumbnail::setProcParams (const ProcParams& pp, int whoChangedIt, bool upda
|
|||||||
int colorlabel = getColorLabel();
|
int colorlabel = getColorLabel();
|
||||||
int inTrash = getStage();
|
int inTrash = getStage();
|
||||||
|
|
||||||
pparams = pp;
|
if (pe) {
|
||||||
|
// coarse.rotate works in ADD mode only, so we set it to 0 first
|
||||||
|
if (pe->coarse.rotate)
|
||||||
|
pparams.coarse.rotate = 0;
|
||||||
|
pe->combine(pparams, pp, true);
|
||||||
|
}
|
||||||
|
else pparams = pp;
|
||||||
pparamsValid = true;
|
pparamsValid = true;
|
||||||
needsReProcessing = true;
|
needsReProcessing = true;
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ class Thumbnail {
|
|||||||
// Use this to create params on demand for update
|
// Use this to create params on demand for update
|
||||||
rtengine::procparams::ProcParams* createProcParamsForUpdate (bool returnParams, bool forceCPB);
|
rtengine::procparams::ProcParams* createProcParamsForUpdate (bool returnParams, bool forceCPB);
|
||||||
|
|
||||||
void setProcParams (const rtengine::procparams::ProcParams& pp, int whoChangedIt=-1, bool updateCacheNow=true);
|
void setProcParams (const rtengine::procparams::ProcParams& pp, ParamsEdited* pe=NULL, int whoChangedIt=-1, bool updateCacheNow=true);
|
||||||
void clearProcParams (int whoClearedIt=-1);
|
void clearProcParams (int whoClearedIt=-1);
|
||||||
void loadProcParams ();
|
void loadProcParams ();
|
||||||
|
|
||||||
|
@ -263,26 +263,40 @@ void ToolPanelCoordinator::panelChanged (rtengine::ProcEvent event, const Glib::
|
|||||||
paramcListeners[i]->procParamsChanged (params, event, descr);
|
paramcListeners[i]->procParamsChanged (params, event, descr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolPanelCoordinator::profileChange (const ProcParams *nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited) {
|
void ToolPanelCoordinator::profileChange (const PartialProfile *nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited) {
|
||||||
|
|
||||||
int fw, fh, tr;
|
int fw, fh, tr;
|
||||||
|
|
||||||
if (!ipc) return;
|
if (!ipc) return;
|
||||||
ProcParams *params = ipc->beginUpdateParams ();
|
ProcParams *params = ipc->beginUpdateParams ();
|
||||||
|
ProcParams *mergedParams = new ProcParams();
|
||||||
|
|
||||||
|
// Copy the current params as default values for the fusion
|
||||||
|
*mergedParams = *params;
|
||||||
|
|
||||||
|
// Reset IPTC values when switching procparams from the History
|
||||||
|
if (event == rtengine::EvHistoryBrowsed) {
|
||||||
|
mergedParams->iptc.clear();
|
||||||
|
mergedParams->exif.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
// And apply the partial profile nparams to mergedParams
|
||||||
|
nparams->applyTo(mergedParams);
|
||||||
|
|
||||||
// Derive the effective changes, if it's a profile change, to prevent slow RAW rerendering if not necessary
|
// Derive the effective changes, if it's a profile change, to prevent slow RAW rerendering if not necessary
|
||||||
bool filterRawRefresh=false;
|
bool filterRawRefresh=false;
|
||||||
if (event!=rtengine::EvPhotoLoaded) {
|
if (event!=rtengine::EvPhotoLoaded) {
|
||||||
ParamsEdited pe;
|
ParamsEdited pe;
|
||||||
std::vector<rtengine::procparams::ProcParams> lParams(2);
|
std::vector<rtengine::procparams::ProcParams> lParams(2);
|
||||||
lParams[0]=*params; lParams[1]=*nparams;
|
lParams[0]=*params; lParams[1]=*mergedParams;
|
||||||
pe.set(true);
|
pe.set(true);
|
||||||
pe.initFrom (lParams);
|
pe.initFrom (lParams);
|
||||||
|
|
||||||
filterRawRefresh=pe.raw.isUnchanged();
|
filterRawRefresh=pe.raw.isUnchanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
*params = *nparams;
|
*params = *mergedParams;
|
||||||
|
delete mergedParams;
|
||||||
|
|
||||||
tr = TR_NONE;
|
tr = TR_NONE;
|
||||||
if (params->coarse.rotate==90) tr |= TR_R90;
|
if (params->coarse.rotate==90) tr |= TR_R90;
|
||||||
|
@ -185,7 +185,7 @@ class ToolPanelCoordinator : public ToolPanelListener,
|
|||||||
void panelChanged (rtengine::ProcEvent event, const Glib::ustring& descr);
|
void panelChanged (rtengine::ProcEvent event, const Glib::ustring& descr);
|
||||||
|
|
||||||
// profilechangelistener interface
|
// profilechangelistener interface
|
||||||
void profileChange (const rtengine::procparams::ProcParams* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited=NULL);
|
void profileChange (const rtengine::procparams::PartialProfile* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited=NULL);
|
||||||
void setDefaults (rtengine::procparams::ProcParams* defparams);
|
void setDefaults (rtengine::procparams::ProcParams* defparams);
|
||||||
|
|
||||||
// to support the GUI:
|
// to support the GUI:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user