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_PROFILE;Profil
|
||||
PROFILEPANEL_SAVEDLGLABEL;Enregistrer les paramètres de post-traitement...
|
||||
PROFILEPANEL_TOOLTIPCOPY;Copie le profil courant dans le presse-papier
|
||||
PROFILEPANEL_TOOLTIPLOAD;Charger un profil depuis un fichier
|
||||
PROFILEPANEL_TOOLTIPPASTE; Colle le profil depuis le presse-papier
|
||||
PROFILEPANEL_TOOLTIPSAVE;Enregistrer le profil actuel
|
||||
PROFILEPANEL_COPYPPASTE;Paramètres à copier
|
||||
PROFILEPANEL_LOADPPASTE;Paramètres à charger
|
||||
PROFILEPANEL_PASTEPPASTE;Paramètres à coller
|
||||
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_CACORRECTION;Correction de l'aberr. chomatique...
|
||||
PROGRESSBAR_DARKFRAME;Trame Noire...
|
||||
@ -808,6 +812,7 @@ TP_COLORSHIFT_GREENMAGENTA;Vert-Magenta
|
||||
TP_COLORSHIFT_LABEL;Décalage couleur
|
||||
TP_CROP_FIXRATIO;Ratio fixe:
|
||||
TP_CROP_GTDIAGONALS;Règle des diagonales
|
||||
TP_CROP_GTEPASSPORT;Passeport biométrique
|
||||
TP_CROP_GTGRID;Grille
|
||||
TP_CROP_GTHARMMEANS1;Manière harmonique 1
|
||||
TP_CROP_GTHARMMEANS2;Manière harmonique 2
|
||||
@ -927,6 +932,7 @@ TP_PERSPECTIVE_LABEL;Perspective
|
||||
TP_PERSPECTIVE_VERTICAL;Verticale
|
||||
TP_PREPROCESS_GREENEQUIL;Équilibrage du vert
|
||||
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_LINEDENOISE;Filtre de bruit de ligne
|
||||
TP_PREPROCESS_NO_FOUND;Aucun trouvé
|
||||
|
@ -748,10 +748,14 @@ PROFILEPANEL_PLASTPHOTO;Last Photo
|
||||
PROFILEPANEL_PLASTSAVED;Last Saved
|
||||
PROFILEPANEL_PROFILE;Profile
|
||||
PROFILEPANEL_SAVEDLGLABEL;Save Postprocessing Parameters...
|
||||
PROFILEPANEL_TOOLTIPCOPY;Copy current profile to clipboard
|
||||
PROFILEPANEL_TOOLTIPLOAD;Load a profile from file
|
||||
PROFILEPANEL_TOOLTIPPASTE; Paste profile from clipboard
|
||||
PROFILEPANEL_TOOLTIPSAVE;Save current profile
|
||||
PROFILEPANEL_COPYPPASTE;Parameters to copy
|
||||
PROFILEPANEL_LOADPPASTE;Parameters to load
|
||||
PROFILEPANEL_PASTEPPASTE;Parameters to paste
|
||||
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_CACORRECTION;CA correction...
|
||||
PROGRESSBAR_DARKFRAME;Darkframe...
|
||||
@ -955,6 +959,7 @@ TP_PERSPECTIVE_LABEL;Perspective
|
||||
TP_PERSPECTIVE_VERTICAL;Vertical
|
||||
TP_PREPROCESS_GREENEQUIL;Green equilibration
|
||||
TP_PREPROCESS_HOTDEADPIXFILT;Apply hot/dead pixel filter
|
||||
TP_PREPROCESS_HOTDEADPIXTHRESH;Hot/dead pixel detection threshold
|
||||
TP_PREPROCESS_LABEL;Preprocessing
|
||||
TP_PREPROCESS_LINEDENOISE;Line noise filter
|
||||
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_ZOOMOUT;Zoom Out <b>-</b>
|
||||
#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
|
||||
HighlightComprThreshold=33
|
||||
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]
|
||||
Red=100;0;0;
|
||||
@ -53,6 +53,15 @@ 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
|
||||
@ -65,20 +74,10 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5000
|
||||
Green=1
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
Temperature=5745
|
||||
Green=1.0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=false
|
||||
@ -97,15 +96,6 @@ Gamma=2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
||||
LocalContrast=0
|
||||
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]
|
||||
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=4281
|
||||
Height=2871
|
||||
|
||||
[Color Management]
|
||||
InputProfile=(cameraICC)
|
||||
BlendCMSMatrix=true
|
||||
@ -193,13 +136,12 @@ 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
|
||||
|
@ -53,6 +53,15 @@ 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
|
||||
@ -65,20 +74,10 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5000
|
||||
Green=1
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
Temperature=5745
|
||||
Green=1.0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=false
|
||||
@ -97,15 +96,6 @@ Gamma=2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
||||
LocalContrast=0
|
||||
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]
|
||||
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=4281
|
||||
Height=2871
|
||||
|
||||
[Color Management]
|
||||
InputProfile=(cameraICC)
|
||||
BlendCMSMatrix=true
|
||||
@ -193,13 +136,12 @@ 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
|
||||
|
@ -53,6 +53,15 @@ 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
|
||||
@ -65,21 +74,11 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5000
|
||||
Temperature=5745
|
||||
Green=1.0
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=false
|
||||
Threshold=50
|
||||
@ -97,15 +96,6 @@ Gamma=2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -116,60 +106,13 @@ 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
|
||||
@ -193,13 +136,12 @@ 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
|
||||
|
@ -53,6 +53,15 @@ 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
|
||||
@ -65,21 +74,11 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5000
|
||||
Temperature=5745
|
||||
Green=1.0
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=false
|
||||
Threshold=50
|
||||
@ -97,15 +96,6 @@ Gamma=2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -116,60 +106,13 @@ 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
|
||||
@ -193,13 +136,12 @@ 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
|
||||
|
@ -53,6 +53,15 @@ 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
|
||||
@ -65,20 +74,10 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5000
|
||||
Green=1
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
Temperature=5745
|
||||
Green=1.0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=false
|
||||
@ -97,15 +96,6 @@ Gamma=2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
||||
LocalContrast=0
|
||||
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]
|
||||
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=4281
|
||||
Height=2871
|
||||
|
||||
[Color Management]
|
||||
InputProfile=(cameraICC)
|
||||
BlendCMSMatrix=true
|
||||
@ -193,13 +136,12 @@ 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
|
||||
|
@ -53,6 +53,15 @@ 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
|
||||
@ -65,20 +74,10 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5000
|
||||
Green=1
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
Temperature=5745
|
||||
Green=1.0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=false
|
||||
@ -97,15 +96,6 @@ Gamma=2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
||||
LocalContrast=0
|
||||
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]
|
||||
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=4281
|
||||
Height=2871
|
||||
|
||||
[Color Management]
|
||||
InputProfile=(cameraICC)
|
||||
BlendCMSMatrix=true
|
||||
@ -193,13 +136,12 @@ 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
|
||||
|
@ -53,6 +53,15 @@ 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
|
||||
@ -65,20 +74,10 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5000
|
||||
Green=1
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
Temperature=5745
|
||||
Green=1.0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=false
|
||||
@ -97,15 +96,6 @@ Gamma=2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
||||
LocalContrast=0
|
||||
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]
|
||||
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=4281
|
||||
Height=2871
|
||||
|
||||
[Color Management]
|
||||
InputProfile=(cameraICC)
|
||||
BlendCMSMatrix=true
|
||||
@ -193,13 +136,12 @@ 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
|
||||
|
@ -11,7 +11,7 @@ InTrash=false
|
||||
[Exposure]
|
||||
Auto=true
|
||||
Clip=0
|
||||
Compensation=-0
|
||||
Compensation=0.0
|
||||
Brightness=0
|
||||
Contrast=0
|
||||
Saturation=0
|
||||
@ -74,20 +74,10 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5745
|
||||
Green=1.0353332844067824
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
Green=1.0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=false
|
||||
@ -106,15 +96,6 @@ Gamma=2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -125,60 +106,13 @@ 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.0
|
||||
AppliesTo=Cropped area
|
||||
Method=Bicubic
|
||||
DataSpecified=0
|
||||
Width=4281
|
||||
Height=2871
|
||||
|
||||
[Color Management]
|
||||
InputProfile=(cameraICC)
|
||||
BlendCMSMatrix=true
|
||||
@ -202,13 +136,12 @@ 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
|
||||
|
@ -74,20 +74,10 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5745
|
||||
Green=1.0349999999999993
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
Green=1.0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=false
|
||||
@ -106,15 +96,6 @@ Gamma=2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -125,60 +106,13 @@ 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.0
|
||||
AppliesTo=Cropped area
|
||||
Method=Bicubic
|
||||
DataSpecified=0
|
||||
Width=4276
|
||||
Height=2836
|
||||
|
||||
[Color Management]
|
||||
InputProfile=(cameraICC)
|
||||
BlendCMSMatrix=true
|
||||
@ -202,13 +136,12 @@ 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
|
||||
|
@ -53,6 +53,15 @@ 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
|
||||
@ -65,20 +74,10 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5000
|
||||
Green=1
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
Temperature=5745
|
||||
Green=1.0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=true
|
||||
@ -97,15 +96,6 @@ Gamma=1.2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
||||
LocalContrast=0
|
||||
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]
|
||||
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=4281
|
||||
Height=2871
|
||||
|
||||
[Color Management]
|
||||
InputProfile=(cameraICC)
|
||||
BlendCMSMatrix=true
|
||||
@ -193,13 +136,12 @@ 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
|
||||
|
@ -53,6 +53,15 @@ 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
|
||||
@ -65,20 +74,10 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5000
|
||||
Green=1
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
Temperature=5745
|
||||
Green=1.0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=true
|
||||
@ -97,15 +96,6 @@ Gamma=1.2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
||||
LocalContrast=0
|
||||
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]
|
||||
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=4281
|
||||
Height=2871
|
||||
|
||||
[Color Management]
|
||||
InputProfile=(cameraICC)
|
||||
BlendCMSMatrix=true
|
||||
@ -193,13 +136,12 @@ 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
|
||||
|
@ -53,6 +53,15 @@ 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
|
||||
@ -65,20 +74,10 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5000
|
||||
Green=1
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
Temperature=5745
|
||||
Green=1.0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=false
|
||||
@ -97,15 +96,6 @@ Gamma=2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -116,60 +106,13 @@ ShadowTonalWidth=80
|
||||
LocalContrast=0
|
||||
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]
|
||||
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=4281
|
||||
Height=2871
|
||||
|
||||
[Color Management]
|
||||
InputProfile=(cameraICC)
|
||||
BlendCMSMatrix=true
|
||||
@ -193,13 +136,12 @@ 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
|
||||
|
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
|
||||
DeconvIterations=30
|
||||
|
||||
[Vibrance]
|
||||
Enabled=false
|
||||
Pastels=50
|
||||
Saturated=50
|
||||
PSThreshold=75
|
||||
ProtectSkins=false
|
||||
AvoidColorShift=true
|
||||
PastSatTog=true
|
||||
|
||||
[SharpenEdge]
|
||||
Enabled=false
|
||||
Passes=2
|
||||
@ -65,20 +74,10 @@ Matrix=false
|
||||
Strength=20
|
||||
Uniformity=50
|
||||
|
||||
[Color Boost]
|
||||
Amount=0
|
||||
AvoidColorClipping=false
|
||||
SaturationLimiter=false
|
||||
SaturationLimit=75
|
||||
|
||||
[White Balance]
|
||||
Setting=Camera
|
||||
Temperature=5200
|
||||
Green=1
|
||||
|
||||
[Color Shift]
|
||||
ChannelA=0
|
||||
ChannelB=0
|
||||
Temperature=5745
|
||||
Green=1.0
|
||||
|
||||
[Impulse Denoising]
|
||||
Enabled=false
|
||||
@ -86,7 +85,7 @@ Threshold=50
|
||||
|
||||
[Defringing]
|
||||
Enabled=false
|
||||
Radius=2
|
||||
Radius=2.0
|
||||
Threshold=25
|
||||
|
||||
[Directional Pyramid Denoising]
|
||||
@ -97,15 +96,6 @@ Gamma=2
|
||||
LumCurve=0;
|
||||
ChromCurve=0;
|
||||
|
||||
[Luminance Denoising]
|
||||
Enabled=false
|
||||
Radius=2.5
|
||||
EdgeTolerance=1500
|
||||
|
||||
[Chrominance Denoising]
|
||||
Enabled=false
|
||||
Amount=20
|
||||
|
||||
[Shadows & Highlights]
|
||||
Enabled=false
|
||||
HighQuality=false
|
||||
@ -116,69 +106,22 @@ 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
|
||||
InputProfile=(cameraICC)
|
||||
BlendCMSMatrix=true
|
||||
WorkingProfile=sRGB
|
||||
OutputProfile=RT_sRGB
|
||||
Gammafree=default
|
||||
Freegamma=false
|
||||
GammaValue=2.22
|
||||
GammaSlope=4.5
|
||||
GammaValue=2.22
|
||||
GammaSlope=4.5
|
||||
|
||||
[Directional Pyramid Equalizer]
|
||||
Enabled=false
|
||||
@ -193,13 +136,12 @@ 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
|
||||
|
@ -277,9 +277,9 @@ ImageData::~ImageData () {
|
||||
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)
|
||||
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);
|
||||
if (ds) {
|
||||
iptc_dataset_get_data (ds, buffer, 2100);
|
||||
procparams::IPTCPair ic;
|
||||
ic.field = strTags[i].field;
|
||||
ic.values.push_back (safe_locale_to_utf8((char*)buffer));
|
||||
std::vector<Glib::ustring> icValues;
|
||||
icValues.push_back (safe_locale_to_utf8((char*)buffer));
|
||||
|
||||
iptcc.push_back (ic);
|
||||
iptcc[strTags[i].field] = icValues;
|
||||
iptc_dataset_unref (ds);
|
||||
}
|
||||
}
|
||||
IptcDataSet* ds = NULL;
|
||||
procparams::IPTCPair ickw;
|
||||
ickw.field = "Keywords";
|
||||
std::vector<Glib::ustring> keywords;
|
||||
while ((ds=iptc_data_get_next_dataset (iptc, ds, IPTC_RECORD_APP_2, IPTC_TAG_KEYWORDS))) {
|
||||
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;
|
||||
procparams::IPTCPair icsc;
|
||||
icsc.field = "SupplementalCategories";
|
||||
std::vector<Glib::ustring> suppCategories;
|
||||
while ((ds=iptc_data_get_next_dataset (iptc, ds, IPTC_RECORD_APP_2, IPTC_TAG_SUPPL_CATEGORY))) {
|
||||
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);
|
||||
}
|
||||
iptcc.push_back (icsc);
|
||||
iptcc["SupplementalCategories"] = suppCategories;
|
||||
return iptcc;
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ class ImageData : public ImageMetaData {
|
||||
virtual ~ImageData ();
|
||||
|
||||
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 hasIPTC () const { return iptc; }
|
||||
|
@ -61,14 +61,17 @@ void ImageIO::setMetadata (const rtexif::TagDirectory* eroot) {
|
||||
}
|
||||
|
||||
// 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
|
||||
exifChange.resize (exif.size());
|
||||
for (int i=0; i<exif.size(); i++) {
|
||||
exifChange[i].first = exif[i].field;
|
||||
exifChange[i].second = exif[i].value;
|
||||
}
|
||||
exifChange.clear();
|
||||
exifChange = exif;
|
||||
/*unsigned int j=0;
|
||||
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; }
|
||||
|
||||
@ -82,23 +85,23 @@ void ImageIO::setMetadata (const rtexif::TagDirectory* eroot, const std::vector<
|
||||
return;
|
||||
|
||||
iptc = iptc_data_new ();
|
||||
for (int i=0; i<iptcc.size(); i++) {
|
||||
if (iptcc[i].field == "Keywords" && !(iptcc[i].values.empty())) {
|
||||
for (int j=0; j<iptcc[i].values.size(); j++) {
|
||||
for (rtengine::procparams::IPTCPairs::const_iterator i=iptcc.begin(); i!=iptcc.end(); i++) {
|
||||
if (i->first == "Keywords" && !(i->second.empty())) {
|
||||
for (unsigned int j=0; j<i->second.size(); j++) {
|
||||
IptcDataSet * ds = iptc_dataset_new ();
|
||||
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_data_add_dataset (iptc, ds);
|
||||
iptc_dataset_unref (ds);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
else if (iptcc[i].field == "SupplementalCategories" && !(iptcc[i].values.empty())) {
|
||||
for (int j=0; j<iptcc[i].values.size(); j++) {
|
||||
else if (i->first == "SupplementalCategories" && !(i->second.empty())) {
|
||||
for (unsigned int j=0; j<i->second.size(); j++) {
|
||||
IptcDataSet * ds = iptc_dataset_new ();
|
||||
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_data_add_dataset (iptc, ds);
|
||||
iptc_dataset_unref (ds);
|
||||
@ -106,10 +109,10 @@ void ImageIO::setMetadata (const rtexif::TagDirectory* eroot, const std::vector<
|
||||
continue;
|
||||
}
|
||||
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 ();
|
||||
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_data_add_dataset (iptc, ds);
|
||||
iptc_dataset_unref (ds);
|
||||
@ -243,7 +246,7 @@ int ImageIO::loadPNG (Glib::ustring fname) {
|
||||
png_read_row (png, (png_byte*)row, NULL);
|
||||
if (bit_depth==16) { // convert scanline to host byte order
|
||||
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]);
|
||||
}
|
||||
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];
|
||||
|
||||
png_write_info(png,info);
|
||||
for (unsigned int i=0;i<height;i++) {
|
||||
for (int i=0;i<height;i++) {
|
||||
getScanline (i, row, bps);
|
||||
if (bps==16) {
|
||||
// convert to network byte order
|
||||
@ -892,7 +895,7 @@ void png_flush(png_structp png_ptr) {
|
||||
|
||||
int ImageIO::load (Glib::ustring fname) {
|
||||
|
||||
int lastdot = fname.find_last_of ('.');
|
||||
unsigned int lastdot = fname.find_last_of ('.');
|
||||
if( Glib::ustring::npos == lastdot )
|
||||
return IMIO_FILETYPENOTSUPPORTED;
|
||||
if (!fname.casefold().compare (lastdot, 4, ".png"))
|
||||
@ -906,7 +909,7 @@ int ImageIO::load (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 )
|
||||
return IMIO_FILETYPENOTSUPPORTED;
|
||||
if (!fname.casefold().compare (lastdot, 4, ".png"))
|
||||
|
@ -44,23 +44,23 @@ class ImageIO {
|
||||
int profileLength;
|
||||
char* loadedProfileData;
|
||||
int loadedProfileLength;
|
||||
std::vector<std::pair<std::string,std::string> > exifChange;
|
||||
procparams::ExifPairs exifChange;
|
||||
IptcData* iptc;
|
||||
const rtexif::TagDirectory* exifRoot;
|
||||
Glib::Mutex imutex;
|
||||
|
||||
public:
|
||||
static Glib::ustring errorMsg[6];
|
||||
|
||||
|
||||
ImageIO () : pl (NULL), embProfile(NULL), profileData(NULL), loadedProfileData(NULL), loadedProfileLength(0), iptc(NULL), exifRoot (NULL) {}
|
||||
|
||||
|
||||
virtual ~ImageIO ();
|
||||
|
||||
void setProgressListener (ProgressListener* l) { pl = l; }
|
||||
|
||||
virtual int getW () =0;
|
||||
virtual int getH () =0;
|
||||
virtual void allocate (int width, int height) =0;
|
||||
virtual int getH () =0;
|
||||
virtual void allocate (int width, int height) =0;
|
||||
virtual int getBPS () =0;
|
||||
virtual void getScanline (int row, unsigned char* buffer, int bps) {}
|
||||
virtual void setScanline (int row, unsigned char* buffer, int bps) {}
|
||||
@ -78,12 +78,12 @@ class ImageIO {
|
||||
int savePNG (Glib::ustring fname, int compression = -1, volatile int bps = -1);
|
||||
int saveJPEG (Glib::ustring fname, int quality = 100);
|
||||
int saveTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false);
|
||||
|
||||
|
||||
cmsHPROFILE getEmbeddedProfile () { return embProfile; }
|
||||
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, const std::vector<rtengine::procparams::ExifPair>& exif, const std::vector<rtengine::procparams::IPTCPair>& iptcc);
|
||||
void setMetadata (const rtexif::TagDirectory* eroot);
|
||||
void setMetadata (const rtexif::TagDirectory* eroot, const rtengine::procparams::ExifPairs& exif, const rtengine::procparams::IPTCPairs& iptcc);
|
||||
void setOutputProfile (char* pdata, int plen);
|
||||
Glib::Mutex& mutex () { return imutex; }
|
||||
};
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -22,6 +22,8 @@
|
||||
#include <glibmm.h>
|
||||
#include <vector>
|
||||
|
||||
class ParamsEdited;
|
||||
|
||||
namespace rtengine {
|
||||
namespace procparams {
|
||||
|
||||
@ -126,14 +128,14 @@ class VibranceParams {
|
||||
/**
|
||||
* Parameters of the color boost
|
||||
*/
|
||||
class ColorBoostParams {
|
||||
/*class ColorBoostParams {
|
||||
|
||||
public:
|
||||
int amount;
|
||||
bool avoidclip;
|
||||
bool enable_saturationlimiter;
|
||||
double saturationlimit;
|
||||
};
|
||||
};*/
|
||||
|
||||
/**
|
||||
* Parameters of the white balance adjustments
|
||||
@ -179,36 +181,35 @@ class WBParams {
|
||||
/**
|
||||
* Parameters of the color shift
|
||||
*/
|
||||
class ColorShiftParams {
|
||||
/*class ColorShiftParams {
|
||||
|
||||
public:
|
||||
double a;
|
||||
double b;
|
||||
};
|
||||
};*/
|
||||
|
||||
/**
|
||||
* Parameters of the luminance denoising
|
||||
*/
|
||||
class LumaDenoiseParams {
|
||||
/*class LumaDenoiseParams {
|
||||
|
||||
public:
|
||||
bool enabled;
|
||||
double radius;
|
||||
int edgetolerance;
|
||||
};
|
||||
};*/
|
||||
|
||||
/**
|
||||
* Parameters of the color denoising
|
||||
*/
|
||||
class ColorDenoiseParams {
|
||||
/*class ColorDenoiseParams {
|
||||
|
||||
public:
|
||||
bool enabled;
|
||||
double radius;
|
||||
int edgetolerance;
|
||||
bool edgesensitive;
|
||||
int amount;
|
||||
};
|
||||
};*/
|
||||
|
||||
/**
|
||||
* Parameters of defringing
|
||||
@ -243,8 +244,6 @@ class ColorDenoiseParams {
|
||||
int luma;
|
||||
int chroma;
|
||||
float gamma;
|
||||
std::vector<double> lumcurve;
|
||||
std::vector<double> chromcurve;
|
||||
};
|
||||
|
||||
//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 {
|
||||
|
||||
public:
|
||||
Glib::ustring field;
|
||||
Glib::ustring value;
|
||||
};
|
||||
typedef std::map<Glib::ustring, Glib::ustring> ExifPairs;
|
||||
|
||||
/**
|
||||
* The IPTC key/value pairs
|
||||
*/
|
||||
class IPTCPair {
|
||||
|
||||
public:
|
||||
Glib::ustring field;
|
||||
std::vector<Glib::ustring> values;
|
||||
};
|
||||
typedef std::map<Glib::ustring, std::vector<Glib::ustring> > IPTCPairs;
|
||||
|
||||
/**
|
||||
* Directional pyramid equalizer params
|
||||
@ -522,11 +511,11 @@ class ProcParams {
|
||||
SharpenEdgeParams sharpenEdge; ///< Sharpen edge parameters
|
||||
SharpenMicroParams sharpenMicro; ///< Sharpen microcontrast parameters
|
||||
VibranceParams vibrance; ///< Vibrance parameters
|
||||
ColorBoostParams colorBoost; ///< Color boost parameters
|
||||
//ColorBoostParams colorBoost; ///< Color boost parameters
|
||||
WBParams wb; ///< White balance parameters
|
||||
ColorShiftParams colorShift; ///< Color shift parameters
|
||||
LumaDenoiseParams lumaDenoise; ///< Luminance denoising parameters
|
||||
ColorDenoiseParams colorDenoise; ///< Color denoising parameters
|
||||
//ColorShiftParams colorShift; ///< Color shift parameters
|
||||
//LumaDenoiseParams lumaDenoise; ///< Luminance denoising parameters
|
||||
//ColorDenoiseParams colorDenoise; ///< Color denoising parameters
|
||||
DefringeParams defringe; ///< Defringing parameters
|
||||
ImpulseDenoiseParams impulseDenoise; ///< Impulse denoising parameters
|
||||
DirPyrDenoiseParams dirpyrDenoise; ///< Directional Pyramid denoising parameters
|
||||
@ -544,18 +533,18 @@ class ProcParams {
|
||||
HRecParams hlrecovery; ///< Highlight recovery parameters
|
||||
ResizeParams resize; ///< Resize parameters
|
||||
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
|
||||
DirPyrEqualizerParams dirpyrequalizer; ///< directional pyramid 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 colorlabel; ///< Custom color label
|
||||
bool inTrash; ///< Marks deleted image
|
||||
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
|
||||
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
|
||||
|
||||
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.
|
||||
@ -568,17 +557,19 @@ class ProcParams {
|
||||
/**
|
||||
* Saves the parameters to possibly two files. This is a performance improvement if a function has to
|
||||
* 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 fname2 the name of the second file (can be an empty string) (optional)
|
||||
* @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 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)
|
||||
*/
|
||||
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.
|
||||
* @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)
|
||||
*/
|
||||
int load (Glib::ustring fname);
|
||||
int load (Glib::ustring fname, ParamsEdited* pedited=NULL);
|
||||
|
||||
/** Creates a new instance of ProcParams.
|
||||
* @return a pointer to the new ProcParams instance. */
|
||||
@ -603,6 +594,32 @@ class ProcParams {
|
||||
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
|
||||
|
@ -58,7 +58,7 @@ namespace rtengine {
|
||||
virtual bool hasIPTC () const =0;
|
||||
/** Returns 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 */
|
||||
virtual struct tm getDateTime () const =0;
|
||||
/** @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)
|
||||
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)
|
||||
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)
|
||||
|
||||
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
|
||||
int offs = 6;
|
||||
@ -1423,8 +1423,8 @@ int ExifManager::createJPEGMarker (const TagDirectory* root, const std::vector<
|
||||
else
|
||||
cl = new TagDirectory (NULL, ifdAttribs, INTEL);
|
||||
|
||||
for (int i=0; i<changeList.size(); i++)
|
||||
cl->applyChange (changeList[i].first, changeList[i].second);
|
||||
for (rtengine::procparams::ExifPairs::const_iterator i=changeList.begin(); i!=changeList.end(); i++)
|
||||
cl->applyChange (i->first, i->second);
|
||||
|
||||
getDefaultTIFFTags (cl);
|
||||
|
||||
@ -1442,7 +1442,7 @@ int ExifManager::createJPEGMarker (const TagDirectory* root, const std::vector<
|
||||
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
|
||||
int offs = 0;
|
||||
@ -1489,8 +1489,8 @@ int ExifManager::createTIFFHeader (const TagDirectory* root, const std::vector<
|
||||
}
|
||||
|
||||
// apply list of changes
|
||||
for (int i=0; i<changeList.size(); i++)
|
||||
cl->applyChange (changeList[i].first, changeList[i].second);
|
||||
for (rtengine::procparams::ExifPairs::const_iterator i=changeList.begin(); i!=changeList.end(); i++)
|
||||
cl->applyChange (i->first, i->second);
|
||||
|
||||
// append default properties
|
||||
getDefaultTIFFTags (cl);
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <sstream>
|
||||
#include <cstdlib>
|
||||
#include <cmath>
|
||||
#include "../rtengine/procparams.h"
|
||||
|
||||
namespace rtexif {
|
||||
|
||||
@ -203,8 +204,8 @@ class ExifManager {
|
||||
static void parseCIFF (FILE* f, int base, int length, TagDirectory* root);
|
||||
|
||||
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 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 createJPEGMarker (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, 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 {
|
||||
|
@ -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})
|
||||
endif (WIN32)
|
||||
# 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)
|
||||
|
||||
add_executable (rth ${EXTRA_SRC} ${BASESOURCEFILES})
|
||||
|
@ -77,7 +77,7 @@ void BatchToolPanelCoordinator::closeSession (bool save) {
|
||||
for (unsigned int j=0; j<toolPanels.size(); j++)
|
||||
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++)
|
||||
@ -95,6 +95,7 @@ void BatchToolPanelCoordinator::initSession () {
|
||||
selected[i]->addThumbnailListener (this);
|
||||
}
|
||||
|
||||
// compare all the ProcParams and describe which parameters has different (i.e. inconsistent) values in pparamsEdited
|
||||
pparamsEdited.initFrom (initialPP);
|
||||
|
||||
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_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_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_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_GREENMAGENTA]) pparams.colorShift.b = 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_ROTATE_DEGREE]) pparams.rotate.degree = 0;
|
||||
if (options.baBehav[ADDSET_DIST_AMOUNT]) pparams.distortion.amount = 0;
|
||||
@ -228,6 +229,7 @@ void BatchToolPanelCoordinator::initSession () {
|
||||
toolPanels[i]->read (&pparams, &pparamsEdited);
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -271,7 +273,7 @@ void BatchToolPanelCoordinator::panelChanged (rtengine::ProcEvent event, const G
|
||||
for (unsigned int j=0; j<toolPanels.size(); j++)
|
||||
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++)
|
||||
@ -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)
|
||||
pparamsEdited = *paramsEdited;
|
||||
|
||||
|
||||
for (int i=0; i<toolPanels.size(); i++)
|
||||
// writing the values to the GUI
|
||||
toolPanels[i]->read (&pparams, &pparamsEdited);
|
||||
|
||||
somethingChanged = true;
|
||||
@ -319,12 +334,12 @@ void BatchToolPanelCoordinator::profileChange (const ProcParams *nparams, rteng
|
||||
for (int i=0; i<toolPanels.size(); i++)
|
||||
toolPanels[i]->write (&pparams, &pparamsEdited);
|
||||
|
||||
// combine with initial parameters and set
|
||||
// combine with initial parameters of each image and set
|
||||
ProcParams newParams;
|
||||
for (int i=0; i<selected.size(); i++) {
|
||||
newParams = initialPP[i];
|
||||
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++)
|
||||
|
@ -55,7 +55,7 @@ class BatchToolPanelCoordinator :
|
||||
void panelChanged (rtengine::ProcEvent event, const Glib::ustring& descr);
|
||||
|
||||
// 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
|
||||
void getAutoWB (double& temp, double& green);
|
||||
|
@ -19,3 +19,51 @@
|
||||
#include "clipboard.h"
|
||||
|
||||
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 "../rtengine/rtengine.h"
|
||||
#include "../rtengine/procparams.h"
|
||||
#include "paramsedited.h"
|
||||
#include "mydiagonalcurve.h"
|
||||
|
||||
class Clipboard {
|
||||
|
||||
|
||||
bool _hasIPTC;
|
||||
std::vector<rtengine::procparams::IPTCPair> iptc;
|
||||
bool _hasProcParams;
|
||||
rtengine::procparams::ProcParams procParams;
|
||||
rtengine::procparams::IPTCPairs iptc;
|
||||
rtengine::procparams::PartialProfile partProfile;
|
||||
DiagonalCurveType hasCurveDataType;
|
||||
std::vector<double> curve;
|
||||
|
||||
|
||||
public:
|
||||
void setIPTC (const std::vector<rtengine::procparams::IPTCPair>& iptcc) { iptc = iptcc; _hasIPTC = true;}
|
||||
const std::vector<rtengine::procparams::IPTCPair>& getIPTC () { return iptc; }
|
||||
void setIPTC (const rtengine::procparams::IPTCPairs& iptcc) { iptc = iptcc; _hasIPTC = true;}
|
||||
const rtengine::procparams::IPTCPairs& getIPTC () { return iptc; }
|
||||
bool hasIPTC () { return _hasIPTC; }
|
||||
|
||||
void setProcParams (const rtengine::procparams::ProcParams& pparams) { procParams = pparams; _hasProcParams = true; }
|
||||
const rtengine::procparams::ProcParams& getProcParams () { return procParams; }
|
||||
bool hasProcParams () { return _hasProcParams; }
|
||||
|
||||
void setPartialProfile (const rtengine::procparams::PartialProfile& pprofile);
|
||||
const rtengine::procparams::PartialProfile& getPartialProfile () { return partProfile; };
|
||||
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; }
|
||||
const std::vector<double> & getCurveData () { return curve; }
|
||||
DiagonalCurveType hasCurveData () { return hasCurveDataType; }
|
||||
|
||||
Clipboard ();
|
||||
~Clipboard ();
|
||||
|
||||
};
|
||||
|
||||
|
@ -479,7 +479,7 @@ void EditorPanel::saveProfile () {
|
||||
ipc->getParams (¶ms);
|
||||
|
||||
// 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()) {
|
||||
rtengine::procparams::ProcParams pparams;
|
||||
ipc->getParams (&pparams);
|
||||
openThm->setProcParams (pparams, EDITOR, false);
|
||||
openThm->setProcParams (pparams, NULL, EDITOR, false);
|
||||
}
|
||||
|
||||
// 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) {
|
||||
|
||||
if (whoChangedIt!=EDITOR)
|
||||
tpc->profileChange (&openThm->getProcParams(), rtengine::EvProfileChangeNotification, M("PROGRESSDLG_PROFILECHANGEDINBROWSER"));
|
||||
if (whoChangedIt!=EDITOR) {
|
||||
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) {
|
||||
|
@ -512,27 +512,15 @@ void ExifPanel::updateChangeList (Gtk::TreeModel::Children root, std::string pre
|
||||
|
||||
if (prefix!="")
|
||||
prefix = prefix + ".";
|
||||
|
||||
|
||||
Gtk::TreeModel::iterator iter;
|
||||
for (iter = root.begin(); iter!=root.end(); iter++) {
|
||||
if (iter->get_value (exifColumns.edited) == true) {
|
||||
ExifPair ec;
|
||||
ec.field = prefix + iter->get_value (exifColumns.field_nopango);
|
||||
ec.value = iter->get_value (exifColumns.value_nopango);
|
||||
changeList.push_back (ec);
|
||||
}
|
||||
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.edited) == true)
|
||||
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = iter->get_value (exifColumns.value_nopango);
|
||||
else if (iter->get_value (exifColumns.action) == WRITE && iter->get_value (exifColumns.icon) == delicon)
|
||||
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = "#delete";
|
||||
else if (iter->get_value (exifColumns.action) == DONTWRITE && iter->get_value (exifColumns.icon) == keepicon)
|
||||
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = "#keep";
|
||||
if (iter->get_value (exifColumns.icon) == keepicon)
|
||||
updateChangeList (iter->children(), prefix + iter->get_value (exifColumns.field_nopango));
|
||||
}
|
||||
@ -546,8 +534,8 @@ void ExifPanel::updateChangeList () {
|
||||
|
||||
void ExifPanel::applyChangeList () {
|
||||
|
||||
for (int i=0; i<changeList.size(); i++)
|
||||
editTag (exifTreeModel->children(), changeList[i].field, changeList[i].value);
|
||||
for (rtengine::procparams::ExifPairs::iterator i=changeList.begin(); i!=changeList.end(); i++)
|
||||
editTag (exifTreeModel->children(), i->first, i->second);
|
||||
}
|
||||
|
||||
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;
|
||||
int fullw, fullh, cx, cy, cw, ch;
|
||||
bool crenabled;
|
||||
std::vector<rtengine::procparams::ExifPair> changeList;
|
||||
std::vector<rtengine::procparams::ExifPair> defChangeList;
|
||||
rtengine::procparams::ExifPairs changeList;
|
||||
rtengine::procparams::ExifPairs defChangeList;
|
||||
bool recursiveOp;
|
||||
|
||||
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_sharpenEdge = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SHARPENEDGE")));
|
||||
bypass_sharpenMicro = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SHARPENMICRO")));
|
||||
bypass_lumaDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_LUMADENOISE")));
|
||||
bypass_colorDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_COLORDENOISE")));
|
||||
//bypass_lumaDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_LUMADENOISE")));
|
||||
//bypass_colorDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_COLORDENOISE")));
|
||||
bypass_defringe = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_DEFRINGE")));
|
||||
bypass_dirpyrDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_DIRPYRDENOISE")));
|
||||
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_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_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_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_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_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_sharpenEdge = bypass_sharpenEdge->get_active ();
|
||||
options.fastexport_bypass_sharpenMicro = bypass_sharpenMicro->get_active ();
|
||||
options.fastexport_bypass_lumaDenoise = bypass_lumaDenoise->get_active ();
|
||||
options.fastexport_bypass_colorDenoise = bypass_colorDenoise->get_active ();
|
||||
//options.fastexport_bypass_lumaDenoise = bypass_lumaDenoise->get_active ();
|
||||
//options.fastexport_bypass_colorDenoise = bypass_colorDenoise->get_active ();
|
||||
options.fastexport_bypass_defringe = bypass_defringe->get_active ();
|
||||
options.fastexport_bypass_dirpyrDenoise = bypass_dirpyrDenoise->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_sharpenEdge->set_active (options.fastexport_bypass_sharpenEdge );
|
||||
bypass_sharpenMicro->set_active (options.fastexport_bypass_sharpenMicro );
|
||||
bypass_lumaDenoise->set_active (options.fastexport_bypass_lumaDenoise );
|
||||
bypass_colorDenoise->set_active (options.fastexport_bypass_colorDenoise );
|
||||
//bypass_lumaDenoise->set_active (options.fastexport_bypass_lumaDenoise );
|
||||
//bypass_colorDenoise->set_active (options.fastexport_bypass_colorDenoise );
|
||||
bypass_defringe->set_active (options.fastexport_bypass_defringe );
|
||||
bypass_dirpyrDenoise->set_active (options.fastexport_bypass_dirpyrDenoise );
|
||||
bypass_sh_hq->set_active (options.fastexport_bypass_sh_hq );
|
||||
@ -323,8 +323,8 @@ void ExportPanel::bypassALL_Toggled(){
|
||||
bypass_sharpeningConn.block (true);
|
||||
bypass_sharpenEdgeConn.block (true);
|
||||
bypass_sharpenMicroConn.block (true);
|
||||
bypass_lumaDenoiseConn.block (true);
|
||||
bypass_colorDenoiseConn.block (true);
|
||||
//bypass_lumaDenoiseConn.block (true);
|
||||
//bypass_colorDenoiseConn.block (true);
|
||||
bypass_defringeConn.block (true);
|
||||
bypass_dirpyrDenoiseConn.block (true);
|
||||
bypass_sh_hqConn.block (true);
|
||||
@ -344,8 +344,8 @@ void ExportPanel::bypassALL_Toggled(){
|
||||
bypass_sharpening->set_active(bypass_ALL->get_active());
|
||||
bypass_sharpenEdge->set_active(bypass_ALL->get_active());
|
||||
bypass_sharpenMicro->set_active(bypass_ALL->get_active());
|
||||
bypass_lumaDenoise->set_active(bypass_ALL->get_active());
|
||||
bypass_colorDenoise->set_active(bypass_ALL->get_active());
|
||||
//bypass_lumaDenoise->set_active(bypass_ALL->get_active());
|
||||
//bypass_colorDenoise->set_active(bypass_ALL->get_active());
|
||||
bypass_defringe->set_active(bypass_ALL->get_active());
|
||||
bypass_dirpyrDenoise->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_sharpenEdgeConn.block (false);
|
||||
bypass_sharpenMicroConn.block (false);
|
||||
bypass_lumaDenoiseConn.block (false);
|
||||
bypass_colorDenoiseConn.block (false);
|
||||
//bypass_lumaDenoiseConn.block (false);
|
||||
//bypass_colorDenoiseConn.block (false);
|
||||
bypass_defringeConn.block (false);
|
||||
bypass_dirpyrDenoiseConn.block (false);
|
||||
bypass_sh_hqConn.block (false);
|
||||
|
@ -39,8 +39,8 @@ class ExportPanel : public Gtk::VBox {
|
||||
Gtk::CheckButton* bypass_sharpenEdge;
|
||||
Gtk::CheckButton* bypass_sharpenMicro;
|
||||
Gtk::CheckButton* bypass_sharpening;
|
||||
Gtk::CheckButton* bypass_lumaDenoise;
|
||||
Gtk::CheckButton* bypass_colorDenoise;
|
||||
//Gtk::CheckButton* bypass_lumaDenoise;
|
||||
//Gtk::CheckButton* bypass_colorDenoise;
|
||||
Gtk::CheckButton* bypass_defringe;
|
||||
Gtk::CheckButton* bypass_dirpyrDenoise;
|
||||
Gtk::CheckButton* bypass_sh_hq;
|
||||
@ -77,8 +77,8 @@ class ExportPanel : public Gtk::VBox {
|
||||
sigc::connection bypass_sharpeningConn ;
|
||||
sigc::connection bypass_sharpenEdgeConn ;
|
||||
sigc::connection bypass_sharpenMicroConn ;
|
||||
sigc::connection bypass_lumaDenoiseConn ;
|
||||
sigc::connection bypass_colorDenoiseConn ;
|
||||
//sigc::connection bypass_lumaDenoiseConn ;
|
||||
//sigc::connection bypass_colorDenoiseConn ;
|
||||
sigc::connection bypass_defringeConn ;
|
||||
sigc::connection bypass_dirpyrDenoiseConn ;
|
||||
sigc::connection bypass_sh_hqConn ;
|
||||
|
@ -32,7 +32,7 @@
|
||||
extern Options options;
|
||||
|
||||
FileBrowser::FileBrowser ()
|
||||
: tbl(NULL),numFiltered(0) {
|
||||
: tbl(NULL),numFiltered(0), partialPasteDlg(M("PARTIALPASTE_DIALOGLABEL")) {
|
||||
|
||||
fbih = new FileBrowserIdleHelper;
|
||||
fbih->fbrowser = this;
|
||||
@ -514,7 +514,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) {
|
||||
rtengine::procparams::ProcParams pp=mselected[i]->thumbnail->getProcParams();
|
||||
pp.raw.df_autoselect= true;
|
||||
pp.raw.dark_frame.clear();
|
||||
mselected[i]->thumbnail->setProcParams(pp,FILEBROWSER,false);
|
||||
mselected[i]->thumbnail->setProcParams(pp,NULL,FILEBROWSER,false);
|
||||
}
|
||||
}else if (m==selectDF){
|
||||
if( !mselected.empty() ){
|
||||
@ -531,7 +531,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) {
|
||||
rtengine::procparams::ProcParams pp=mselected[i]->thumbnail->getProcParams();
|
||||
pp.raw.dark_frame= fc.get_filename();
|
||||
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();
|
||||
pp.raw.ff_AutoSelect= true;
|
||||
pp.raw.ff_file.clear();
|
||||
mselected[i]->thumbnail->setProcParams(pp,FILEBROWSER,false);
|
||||
mselected[i]->thumbnail->setProcParams(pp,NULL,FILEBROWSER,false);
|
||||
}
|
||||
}
|
||||
else if (m==selectFF){
|
||||
@ -571,7 +571,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) {
|
||||
rtengine::procparams::ProcParams pp=mselected[i]->thumbnail->getProcParams();
|
||||
pp.raw.ff_file= fc.get_filename();
|
||||
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
|
||||
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) {
|
||||
for (int i=0; i<mselected.size(); i++)
|
||||
@ -627,40 +627,60 @@ void FileBrowser::copyProfile () {
|
||||
|
||||
void FileBrowser::pasteProfile () {
|
||||
|
||||
std::vector<FileBrowserEntry*> mselected;
|
||||
for (int i=0; i<selected.size(); i++)
|
||||
mselected.push_back (static_cast<FileBrowserEntry*>(selected[i]));
|
||||
if (clipboard.hasProcParams()) {
|
||||
std::vector<FileBrowserEntry*> mselected;
|
||||
for (unsigned int i=0; i<selected.size(); i++)
|
||||
mselected.push_back (static_cast<FileBrowserEntry*>(selected[i]));
|
||||
|
||||
if (!tbl || mselected.empty())
|
||||
return;
|
||||
if (!tbl || mselected.empty())
|
||||
return;
|
||||
|
||||
for (int i=0; i<mselected.size(); i++)
|
||||
mselected[i]->thumbnail->setProcParams (clipboard.getProcParams(), FILEBROWSER);
|
||||
|
||||
queue_draw ();
|
||||
}
|
||||
for (unsigned int i=0; i<mselected.size(); i++) {
|
||||
// copying read only clipboard PartialProfile to a temporary one
|
||||
rtengine::procparams::PartialProfile cbPartProf = clipboard.getPartialProfile();
|
||||
rtengine::procparams::PartialProfile pastedPartProf(cbPartProf.pparams, cbPartProf.pedited, true);
|
||||
|
||||
void FileBrowser::partPasteProfile () {
|
||||
|
||||
std::vector<FileBrowserEntry*> mselected;
|
||||
for (int i=0; i<selected.size(); i++)
|
||||
mselected.push_back (static_cast<FileBrowserEntry*>(selected[i]));
|
||||
|
||||
if (!tbl || mselected.empty())
|
||||
return;
|
||||
|
||||
if (partialPasteDlg.run ()) {
|
||||
|
||||
for (int i=0; i<mselected.size(); i++) {
|
||||
mselected[i]->thumbnail->createProcParamsForUpdate(false,false); // this can execute customprofilebuilder to generate param file
|
||||
rtengine::procparams::ProcParams params = mselected[i]->thumbnail->getProcParams ();
|
||||
partialPasteDlg.applyPaste (¶ms, &clipboard.getProcParams());
|
||||
mselected[i]->thumbnail->setProcParams (params, FILEBROWSER);
|
||||
// applying the PartialProfile to the thumb's ProcParams
|
||||
mselected[i]->thumbnail->setProcParams (*pastedPartProf.pparams, pastedPartProf.pedited, FILEBROWSER);
|
||||
pastedPartProf.deleteInstance();
|
||||
}
|
||||
|
||||
queue_draw ();
|
||||
}
|
||||
partialPasteDlg.hide ();
|
||||
}
|
||||
|
||||
void FileBrowser::partPasteProfile () {
|
||||
|
||||
if (clipboard.hasProcParams()) {
|
||||
|
||||
std::vector<FileBrowserEntry*> mselected;
|
||||
for (unsigned int i=0; i<selected.size(); i++)
|
||||
mselected.push_back (static_cast<FileBrowserEntry*>(selected[i]));
|
||||
|
||||
if (!tbl || mselected.empty())
|
||||
return;
|
||||
|
||||
int i = partialPasteDlg.run ();
|
||||
if (i == Gtk::RESPONSE_OK) {
|
||||
|
||||
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
|
||||
rtengine::procparams::PartialProfile cbPartProf = clipboard.getPartialProfile();
|
||||
rtengine::procparams::PartialProfile pastedPartProf(&mselected[i]->thumbnail->getProcParams (), NULL);
|
||||
|
||||
// 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 ();
|
||||
}
|
||||
partialPasteDlg.hide ();
|
||||
}
|
||||
}
|
||||
|
||||
void FileBrowser::openDefaultViewer (int destination) {
|
||||
@ -726,10 +746,10 @@ bool FileBrowser::keyPressed (GdkEventKey* event) {
|
||||
|
||||
void FileBrowser::applyMenuItemActivated (Glib::ustring ppname) {
|
||||
|
||||
rtengine::procparams::ProcParams* pparams = profileStore.getProfile (ppname);
|
||||
if (pparams && !selected.empty()) {
|
||||
for (int i=0; i<selected.size(); i++)
|
||||
(static_cast<FileBrowserEntry*>(selected[i]))->thumbnail->setProcParams (*pparams, FILEBROWSER);
|
||||
rtengine::procparams::PartialProfile* partProfile = profileStore.getProfile (ppname);
|
||||
if (partProfile->pparams && !selected.empty()) {
|
||||
for (int i=0; i<selected.size(); i++)
|
||||
(static_cast<FileBrowserEntry*>(selected[i]))->thumbnail->setProcParams (*partProfile->pparams, partProfile->pedited, FILEBROWSER);
|
||||
queue_draw ();
|
||||
}
|
||||
}
|
||||
@ -739,17 +759,20 @@ void FileBrowser::applyPartialMenuItemActivated (Glib::ustring ppname) {
|
||||
if (!tbl || selected.empty())
|
||||
return;
|
||||
|
||||
rtengine::procparams::ProcParams* pparams = profileStore.getProfile (ppname);
|
||||
rtengine::procparams::PartialProfile* srcProfiles = profileStore.getProfile (ppname);
|
||||
|
||||
if (pparams) {
|
||||
if (partialPasteDlg.run ()) {
|
||||
if (srcProfiles->pparams) {
|
||||
if (partialPasteDlg.run()==Gtk::RESPONSE_OK) {
|
||||
|
||||
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 ();
|
||||
partialPasteDlg.applyPaste (¶ms, pparams);
|
||||
(static_cast<FileBrowserEntry*>(selected[i]))->thumbnail->setProcParams (params, FILEBROWSER);
|
||||
rtengine::procparams::PartialProfile dstProfile(true);
|
||||
*dstProfile.pparams = (static_cast<FileBrowserEntry*>(selected[i]))->thumbnail->getProcParams ();
|
||||
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 ();
|
||||
}
|
||||
|
@ -102,8 +102,8 @@ class FileBrowser : public ThumbBrowserBase,
|
||||
|
||||
FileBrowserListener* tbl;
|
||||
BrowserFilter filter;
|
||||
PartialPasteDlg partialPasteDlg;
|
||||
int numFiltered;
|
||||
PartialPasteDlg partialPasteDlg;
|
||||
FileBrowserIdleHelper* fbih;
|
||||
|
||||
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_sharpenEdge ) params.sharpenEdge.enabled = false;
|
||||
if (options.fastexport_bypass_sharpenMicro ) params.sharpenMicro.enabled = false;
|
||||
if (options.fastexport_bypass_lumaDenoise ) params.lumaDenoise.enabled = false;
|
||||
if (options.fastexport_bypass_colorDenoise ) params.colorDenoise.enabled = false;
|
||||
//if (options.fastexport_bypass_lumaDenoise ) params.lumaDenoise.enabled = false;
|
||||
//if (options.fastexport_bypass_colorDenoise ) params.colorDenoise.enabled = false;
|
||||
if (options.fastexport_bypass_defringe ) params.defringe.enabled = false;
|
||||
if (options.fastexport_bypass_dirpyrDenoise ) params.dirpyrDenoise.enabled = false;
|
||||
if (options.fastexport_bypass_sh_hq ) params.sh.hq = false;
|
||||
|
@ -144,9 +144,12 @@ void History::historySelectionChanged () {
|
||||
if (row)
|
||||
bTreeView->get_selection()->unselect_all ();
|
||||
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];
|
||||
tpc->profileChange (¶ms, EvHistoryBrowsed, row[historyColumns.text], ¶msEdited);
|
||||
tpc->profileChange (&pp, EvHistoryBrowsed, row[historyColumns.text], ¶msEdited);
|
||||
}
|
||||
if (blistener && blistenerLock==false) {
|
||||
Gtk::TreeModel::Path path = historyModel->get_path (iter);
|
||||
@ -167,9 +170,12 @@ void History::bookmarkSelectionChanged () {
|
||||
if (row)
|
||||
hTreeView->get_selection()->unselect_all ();
|
||||
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];
|
||||
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)
|
||||
row = historyModel->children()[size-1];
|
||||
// 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());
|
||||
newrow[historyColumns.realText] = eventDescrArray[ev];
|
||||
newrow[historyColumns.text] = text;
|
||||
|
@ -339,6 +339,7 @@ IPTCPanel::IPTCPanel () {
|
||||
void IPTCPanel::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
||||
|
||||
disableListener ();
|
||||
changeList.clear();
|
||||
if (!pp->iptc.empty())
|
||||
changeList = pp->iptc;
|
||||
else
|
||||
@ -377,7 +378,7 @@ void IPTCPanel::addKeyWord () {
|
||||
|
||||
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())
|
||||
return;
|
||||
|
||||
@ -390,7 +391,7 @@ void IPTCPanel::addKeyWord () {
|
||||
items.push_back (s);
|
||||
}
|
||||
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]);
|
||||
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 ();
|
||||
if (!selection.empty()) {
|
||||
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())
|
||||
keep.push_back (keywords->get_text (i));
|
||||
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]);
|
||||
}
|
||||
|
||||
@ -415,7 +416,7 @@ void IPTCPanel::delKeyWord () {
|
||||
|
||||
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())
|
||||
return;
|
||||
|
||||
@ -428,7 +429,7 @@ void IPTCPanel::addSuppCategory () {
|
||||
items.push_back (s);
|
||||
}
|
||||
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]);
|
||||
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());
|
||||
@ -441,11 +442,11 @@ void IPTCPanel::delSuppCategory () {
|
||||
std::vector<int> selection = suppCategories->get_selected ();
|
||||
if (!selection.empty()) {
|
||||
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())
|
||||
keep.push_back (suppCategories->get_text (i));
|
||||
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]);
|
||||
}
|
||||
|
||||
@ -455,45 +456,30 @@ void IPTCPanel::delSuppCategory () {
|
||||
void IPTCPanel::updateChangeList () {
|
||||
|
||||
changeList.clear ();
|
||||
changeList.resize (18);
|
||||
changeList[0].field = "Caption";
|
||||
changeList[0].values.push_back (captionText->get_text ());
|
||||
changeList[1].field = "CaptionWriter";
|
||||
changeList[1].values.push_back (captionWriter->get_text ());
|
||||
changeList[2].field = "Headline";
|
||||
changeList[2].values.push_back (headline->get_text ());
|
||||
changeList[3].field = "Instructions";
|
||||
changeList[3].values.push_back (instructions->get_text ());
|
||||
changeList[4].field = "Keywords";
|
||||
for (int i=0; i<keywords->size(); i++)
|
||||
changeList[4].values.push_back (keywords->get_text (i));
|
||||
changeList[5].field = "Category";
|
||||
changeList[5].values.push_back (category->get_entry()->get_text ());
|
||||
changeList[6].field = "SupplementalCategories";
|
||||
for (int i=0; i<suppCategories->size(); i++)
|
||||
changeList[6].values.push_back (suppCategories->get_text (i));
|
||||
changeList[7].field = "Author";
|
||||
changeList[7].values.push_back (author->get_text ());
|
||||
changeList[8].field = "AuthorsPosition";
|
||||
changeList[8].values.push_back (authorPos->get_text ());
|
||||
changeList[9].field = "Credit";
|
||||
changeList[9].values.push_back (credit->get_text ());
|
||||
changeList[10].field = "Source";
|
||||
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 ());
|
||||
changeList["Caption" ].push_back (captionText->get_text ());
|
||||
changeList["CaptionWriter" ].push_back (captionWriter->get_text ());
|
||||
changeList["Headline" ].push_back (headline->get_text ());
|
||||
changeList["Instructions" ].push_back (instructions->get_text ());
|
||||
|
||||
for (unsigned int i=0; i<keywords->size(); i++)
|
||||
changeList["Keywords" ].push_back (keywords->get_text (i));
|
||||
|
||||
changeList["Category" ].push_back (category->get_entry()->get_text ());
|
||||
|
||||
for (unsigned int i=0; i<suppCategories->size(); i++)
|
||||
changeList["SupplementalCategories"].push_back (suppCategories->get_text (i));
|
||||
|
||||
changeList["Author" ].push_back (author->get_text ());
|
||||
changeList["AuthorsPosition"].push_back (authorPos->get_text ());
|
||||
changeList["Credit" ].push_back (credit->get_text ());
|
||||
changeList["Source" ].push_back (source->get_text ());
|
||||
changeList["Copyright" ].push_back (copyright->get_text ());
|
||||
changeList["City" ].push_back (city->get_text ());
|
||||
changeList["Province" ].push_back (province->get_text ());
|
||||
changeList["Country" ].push_back (country->get_text ());
|
||||
changeList["Title" ].push_back (title->get_text ());
|
||||
changeList["DateCreated" ].push_back (dateCreated->get_text ());
|
||||
changeList["TransReference" ].push_back (transReference->get_text ());
|
||||
|
||||
notifyListener ();
|
||||
}
|
||||
@ -524,45 +510,47 @@ void IPTCPanel::applyChangeList () {
|
||||
keyword->get_entry()->set_text ("");
|
||||
suppCategory->get_entry()->set_text ("");
|
||||
|
||||
for (int i=0; i<changeList.size(); i++)
|
||||
if (changeList[i].field == "Caption" && !changeList[i].values.empty())
|
||||
captionText->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "CaptionWriter" && !changeList[i].values.empty())
|
||||
captionWriter->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "Headline" && !changeList[i].values.empty())
|
||||
headline->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "Instructions" && !changeList[i].values.empty())
|
||||
instructions->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "Keywords")
|
||||
for (int j=0; j<changeList[i].values.size(); j++)
|
||||
keywords->append_text (changeList[i].values[j]);
|
||||
else if (changeList[i].field == "Category" && !changeList[i].values.empty())
|
||||
category->get_entry()->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "SupplementalCategories")
|
||||
for (int j=0; j<changeList[i].values.size(); j++)
|
||||
suppCategories->append_text (changeList[i].values[j]);
|
||||
else if (changeList[i].field == "Author" && !changeList[i].values.empty())
|
||||
author->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "AuthorsPosition" && !changeList[i].values.empty())
|
||||
authorPos->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "Credit" && !changeList[i].values.empty())
|
||||
credit->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "Source" && !changeList[i].values.empty())
|
||||
source->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "Copyright" && !changeList[i].values.empty())
|
||||
copyright->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "City" && !changeList[i].values.empty())
|
||||
city->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "Province" && !changeList[i].values.empty())
|
||||
province->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "Country" && !changeList[i].values.empty())
|
||||
country->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "Title" && !changeList[i].values.empty())
|
||||
title->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "DateCreated" && !changeList[i].values.empty())
|
||||
dateCreated->set_text (changeList[i].values[0]);
|
||||
else if (changeList[i].field == "TransReference" && !changeList[i].values.empty())
|
||||
transReference->set_text (changeList[i].values[0]);
|
||||
for (rtengine::procparams::IPTCPairs::iterator i=changeList.begin(); i!=changeList.end(); i++) {
|
||||
printf("- %s: %s\n", i->first.c_str(), i->second.empty()?"[vide]":i->second.at(0).c_str());
|
||||
if (i->first == "Caption" && !i->second.empty())
|
||||
captionText->set_text (i->second.at(0));
|
||||
else if (i->first == "CaptionWriter" && !i->second.empty())
|
||||
captionWriter->set_text (i->second.at(0));
|
||||
else if (i->first == "Headline" && !i->second.empty())
|
||||
headline->set_text (i->second.at(0));
|
||||
else if (i->first == "Instructions" && !i->second.empty())
|
||||
instructions->set_text (i->second.at(0));
|
||||
else if (i->first == "Keywords")
|
||||
for (unsigned int j=0; j<i->second.size(); j++)
|
||||
keywords->append_text (i->second.at(j));
|
||||
else if (i->first == "Category" && !i->second.empty())
|
||||
category->get_entry()->set_text (i->second.at(0));
|
||||
else if (i->first == "SupplementalCategories")
|
||||
for (unsigned int j=0; j<i->second.size(); j++)
|
||||
suppCategories->append_text (i->second.at(j));
|
||||
else if (i->first == "Author" && !i->second.empty())
|
||||
author->set_text (i->second.at(0));
|
||||
else if (i->first == "AuthorsPosition" && !i->second.empty())
|
||||
authorPos->set_text (i->second.at(0));
|
||||
else if (i->first == "Credit" && !i->second.empty())
|
||||
credit->set_text (i->second.at(0));
|
||||
else if (i->first == "Source" && !i->second.empty())
|
||||
source->set_text (i->second.at(0));
|
||||
else if (i->first == "Copyright" && !i->second.empty())
|
||||
copyright->set_text (i->second.at(0));
|
||||
else if (i->first == "City" && !i->second.empty())
|
||||
city->set_text (i->second.at(0));
|
||||
else if (i->first == "Province" && !i->second.empty())
|
||||
province->set_text (i->second.at(0));
|
||||
else if (i->first == "Country" && !i->second.empty())
|
||||
country->set_text (i->second.at(0));
|
||||
else if (i->first == "Title" && !i->second.empty())
|
||||
title->set_text (i->second.at(0));
|
||||
else if (i->first == "DateCreated" && !i->second.empty())
|
||||
dateCreated->set_text (i->second.at(0));
|
||||
else if (i->first == "TransReference" && !i->second.empty())
|
||||
transReference->set_text (i->second.at(0));
|
||||
}
|
||||
|
||||
for (int i=0; i<16; i++)
|
||||
conns[i].block (false);
|
||||
|
@ -26,9 +26,9 @@
|
||||
class IPTCPanel : public Gtk::VBox, public ToolPanel {
|
||||
|
||||
private:
|
||||
std::vector<rtengine::procparams::IPTCPair> changeList;
|
||||
std::vector<rtengine::procparams::IPTCPair> defChangeList;
|
||||
std::vector<rtengine::procparams::IPTCPair> embeddedData;
|
||||
rtengine::procparams::IPTCPairs changeList;
|
||||
rtengine::procparams::IPTCPairs defChangeList;
|
||||
rtengine::procparams::IPTCPairs embeddedData;
|
||||
|
||||
Gtk::TextView* captionView;
|
||||
Glib::RefPtr<Gtk::TextBuffer> captionText;
|
||||
|
182
rtgui/main.cc
182
rtgui/main.cc
@ -58,7 +58,8 @@ bool simpleEditor;
|
||||
* 1 to start GUI (with a dir or file option)
|
||||
* 2 to start GUI because no files found
|
||||
* -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 main(int argc, char **argv)
|
||||
@ -164,24 +165,36 @@ int main(int argc, char **argv)
|
||||
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 )
|
||||
{
|
||||
rtengine::procparams::PartialProfile *rawParams=NULL, *imgParams=NULL;
|
||||
std::vector<Glib::ustring> inputFiles;
|
||||
Glib::ustring outputPath = "";
|
||||
Glib::ustring processingParams = "";
|
||||
std::vector<rtengine::procparams::PartialProfile*> processingParams;
|
||||
bool isDirectory=false;
|
||||
bool outputDirectory=false;
|
||||
bool overwriteFiles=false;
|
||||
bool sideProcParams=false;
|
||||
bool copyParamsFile=false;
|
||||
bool useDefaultIfAbsent=true;
|
||||
bool skipIfNoSidecar=false;
|
||||
bool useDefault=false;
|
||||
unsigned int sideCarFilePos = 0;
|
||||
int compression=100;
|
||||
int bits=-1;
|
||||
std::string outputType = "";
|
||||
unsigned errors=0;
|
||||
for( int iArg=1; iArg<argc; iArg++){
|
||||
if( argv[iArg][0]=='-' ){
|
||||
switch( argv[iArg][1]){
|
||||
switch( argv[iArg][1] ){
|
||||
case 'O':
|
||||
copyParamsFile = true;
|
||||
case 'o': // outputfile or dir
|
||||
@ -192,16 +205,35 @@ int processLineParams( int argc, char **argv )
|
||||
outputDirectory=true;
|
||||
}
|
||||
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 ){
|
||||
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;
|
||||
case 'S':
|
||||
useDefaultIfAbsent=false;
|
||||
case 's': // Processing params next to file (.pp3 appended)
|
||||
skipIfNoSidecar=true;
|
||||
case 's': // Processing params next to file (file extension appended)
|
||||
sideProcParams = true;
|
||||
sideCarFilePos = processingParams.size();
|
||||
break;
|
||||
case 'd':
|
||||
useDefault = true;
|
||||
break;
|
||||
case 'Y':
|
||||
overwriteFiles =true;
|
||||
@ -232,7 +264,7 @@ int processLineParams( int argc, char **argv )
|
||||
safe_build_file_list (dir, names, argv[iArg] );
|
||||
for(size_t iFile=0; iFile< names.size(); iFile++ ){
|
||||
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::size_type ext= s.find_last_of('.');
|
||||
if( Glib::ustring::npos == ext )
|
||||
@ -250,27 +282,41 @@ int processLineParams( int argc, char **argv )
|
||||
case 'h':
|
||||
case '?':
|
||||
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 << 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]) << " -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 << 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 dir and copy pp3 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 << " ex: for IMG001.NEF there should be IMG001.NEF.pp3 in the same dir" << std::endl;
|
||||
std::cerr << " -O <outputFile>|<outputDir> : select output dir and copy " << pparamsExt << " file into it"<< 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." << pparamsExt << " in the same dir" << 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 << " -p <file.pp3> : specify pp3 file to be used for all conversions."<< std::endl;
|
||||
std::cerr << " -S : like -s but skip if " << pparamsExt << " file not found." << 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 << " -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 << " -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;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
argv1 = safe_filename_to_utf8 ( argv[iArg] );
|
||||
if( outputDirectory ){
|
||||
@ -299,17 +345,33 @@ int processLineParams( int argc, char **argv )
|
||||
if( inputFiles.empty() )
|
||||
return 2;
|
||||
|
||||
rtengine::procparams::ProcParams params,paramsRaw,paramsImg, *currentParams;
|
||||
if( !sideProcParams ){
|
||||
if( processingParams.length()>0 )
|
||||
params.load ( processingParams );
|
||||
else{
|
||||
paramsRaw.load(options.profilePath+"/"+options.defProfRaw+paramFileExtension);
|
||||
paramsImg.load(options.profilePath+"/"+options.defProfImg+paramFileExtension);
|
||||
if (useDefault) {
|
||||
rawParams = new rtengine::procparams::PartialProfile(true);
|
||||
if (rawParams->load(options.profilePath+"/" + options.defProfRaw + paramFileExtension)) {
|
||||
std::cerr << "Error: default Raw procparams file \""<< (options.profilePath+"/" + options.defProfRaw + paramFileExtension) << "\" not found" << std::endl;
|
||||
rawParams->deleteInstance();
|
||||
delete rawParams;
|
||||
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++){
|
||||
|
||||
// Has to be reinstanciated at each profile to have a ProcParams object with default values
|
||||
rtengine::procparams::ProcParams currentParams;
|
||||
|
||||
Glib::ustring inputFile = inputFiles[iFile];
|
||||
std::cout << "Processing: " << inputFile << std::endl;
|
||||
|
||||
@ -354,27 +416,48 @@ int processLineParams( int argc, char **argv )
|
||||
std::cerr << "Error loading file: "<< inputFile << std::endl;
|
||||
continue;
|
||||
}
|
||||
if( sideProcParams ){
|
||||
Glib::ustring sideProcessingParams = inputFile + paramFileExtension;
|
||||
if( !safe_file_test( sideProcessingParams, Glib::FILE_TEST_EXISTS ) || params.load ( sideProcessingParams )){
|
||||
if( useDefaultIfAbsent ){
|
||||
currentParams = isRaw? ¶msRaw: ¶msImg;
|
||||
}else{
|
||||
delete ii;
|
||||
errors++;
|
||||
std::cerr << "Error loading processing params: "<< sideProcessingParams << std::endl;
|
||||
continue;
|
||||
}
|
||||
}else
|
||||
currentParams = ¶ms;
|
||||
}else if( processingParams.length()>0 ){
|
||||
currentParams = ¶ms;
|
||||
}else if(isRaw ){
|
||||
currentParams = ¶msRaw;
|
||||
}else{
|
||||
currentParams = ¶msImg;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
job = rtengine::ProcessingJob::create (ii, *currentParams);
|
||||
|
||||
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;
|
||||
// the "load" method don't reset the procparams values anymore, so values found in the procparam file override the one of currentParams
|
||||
if( !safe_file_test( sideProcessingParams, Glib::FILE_TEST_EXISTS ) || currentParams.load ( sideProcessingParams ))
|
||||
std::cerr << "Warning: sidecar file requested but not found for: "<< sideProcessingParams << std::endl;
|
||||
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;
|
||||
errors++;
|
||||
std::cerr << "Error: no sidecar procparams found for: "<< inputFile << std::endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
job = rtengine::ProcessingJob::create (ii, currentParams);
|
||||
if( !job ){
|
||||
errors++;
|
||||
std::cerr << "Error creating processing for: "<< inputFile << std::endl;
|
||||
@ -406,12 +489,17 @@ int processLineParams( int argc, char **argv )
|
||||
}else{
|
||||
if( copyParamsFile ){
|
||||
Glib::ustring outputProcessingParams = outputFile + paramFileExtension;
|
||||
currentParams->save( outputProcessingParams );
|
||||
currentParams.save( outputProcessingParams );
|
||||
}
|
||||
}
|
||||
|
||||
ii->decreaseRef();
|
||||
resultImage->free();
|
||||
}
|
||||
|
||||
if (imgParams) { imgParams->deleteInstance(); delete imgParams; }
|
||||
if (rawParams) { rawParams->deleteInstance(); delete rawParams; }
|
||||
deleteProcParams(processingParams);
|
||||
|
||||
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)
|
||||
startupPath = "";
|
||||
profilePath = "profiles";
|
||||
loadSaveProfilePath = "";
|
||||
dirBrowserWidth = 200;
|
||||
dirBrowserHeight = 150;
|
||||
preferencesWidth = 0;
|
||||
@ -165,8 +166,8 @@ void Options::setDefaults () {
|
||||
fastexport_bypass_sharpening = true;
|
||||
fastexport_bypass_sharpenEdge = true;
|
||||
fastexport_bypass_sharpenMicro = true;
|
||||
fastexport_bypass_lumaDenoise = true;
|
||||
fastexport_bypass_colorDenoise = true;
|
||||
//fastexport_bypass_lumaDenoise = true;
|
||||
//fastexport_bypass_colorDenoise = true;
|
||||
fastexport_bypass_defringe = true;
|
||||
fastexport_bypass_dirpyrDenoise = true;
|
||||
fastexport_bypass_sh_hq = true;
|
||||
@ -211,12 +212,12 @@ void Options::setDefaults () {
|
||||
0, // ADDSET_LC_BRIGHTNESS
|
||||
0, // ADDSET_LC_CONTRAST
|
||||
0, // ADDSET_SHARP_AMOUNT
|
||||
0, // ADDSET_LD_EDGETOLERANCE
|
||||
//0, // ADDSET_LD_EDGETOLERANCE -- From obsolete and removed tool
|
||||
0, // ADDSET_WB_TEMPERATURE
|
||||
0, // ADDSET_WB_GREEN
|
||||
0, // ADDSET_CBOOST_AMOUNT
|
||||
0, // ADDSET_CS_BLUEYELLOW
|
||||
0, // ADDSET_CS_GREENMAGENTA
|
||||
//0, // ADDSET_CBOOST_AMOUNT -- From obsolete and removed tool
|
||||
//0, // ADDSET_CS_BLUEYELLOW -- From obsolete and removed tool
|
||||
//0, // ADDSET_CS_GREENMAGENTA -- From obsolete and removed tool
|
||||
0, // ADDSET_ROTATE_DEGREE
|
||||
0, // ADDSET_DIST_AMOUNT
|
||||
0, // ADDSET_PERSPECTIVE
|
||||
@ -367,12 +368,13 @@ if (keyFile.has_group ("Output")) {
|
||||
}
|
||||
|
||||
if (keyFile.has_group ("Profiles")) {
|
||||
if (keyFile.has_key ("Profiles", "Directory")) profilePath = keyFile.get_string ("Profiles", "Directory");
|
||||
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", "SaveParamsWithFile")) saveParamsFile = keyFile.get_boolean ("Profiles", "SaveParamsWithFile");
|
||||
if (keyFile.has_key ("Profiles", "SaveParamsToCache")) saveParamsCache = keyFile.get_boolean ("Profiles", "SaveParamsToCache");
|
||||
if (keyFile.has_key ("Profiles", "LoadParamsFromLocation")) paramsLoadLocation = (PPLoadLocation)keyFile.get_integer ("Profiles", "LoadParamsFromLocation");
|
||||
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", "ImgDefault")) defProfImg = keyFile.get_string ("Profiles", "ImgDefault");
|
||||
if (keyFile.has_key ("Profiles", "SaveParamsWithFile")) saveParamsFile = keyFile.get_boolean ("Profiles", "SaveParamsWithFile");
|
||||
if (keyFile.has_key ("Profiles", "SaveParamsToCache")) saveParamsCache = keyFile.get_boolean ("Profiles", "SaveParamsToCache");
|
||||
if (keyFile.has_key ("Profiles", "LoadParamsFromLocation")) paramsLoadLocation = (PPLoadLocation)keyFile.get_integer ("Profiles", "LoadParamsFromLocation");
|
||||
if (keyFile.has_key ("Profiles", "CustomProfileBuilder")) customProfileBuilder = keyFile.get_string ("Profiles", "CustomProfileBuilder");
|
||||
}
|
||||
|
||||
@ -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_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_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_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_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_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_string ("Profiles", "Directory", profilePath);
|
||||
keyFile.set_string ("Profiles", "LoadSaveProfilePath", loadSaveProfilePath);
|
||||
keyFile.set_string ("Profiles", "RawDefault", defProfRaw);
|
||||
keyFile.set_string ("Profiles", "ImgDefault", defProfImg);
|
||||
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_sharpenEdge" , fastexport_bypass_sharpenEdge );
|
||||
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_colorDenoise" , fastexport_bypass_colorDenoise );
|
||||
//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_defringe" , fastexport_bypass_defringe );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_dirpyrDenoise" , fastexport_bypass_dirpyrDenoise );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sh_hq" , fastexport_bypass_sh_hq );
|
||||
|
@ -61,6 +61,7 @@ class Options {
|
||||
int startupDir;
|
||||
Glib::ustring startupPath;
|
||||
Glib::ustring profilePath;
|
||||
Glib::ustring loadSaveProfilePath;
|
||||
Glib::ustring lastSaveAsPath;
|
||||
int saveAsDialogWidth;
|
||||
int saveAsDialogHeight;
|
||||
@ -167,8 +168,8 @@ class Options {
|
||||
bool fastexport_bypass_sharpening;
|
||||
bool fastexport_bypass_sharpenEdge;
|
||||
bool fastexport_bypass_sharpenMicro;
|
||||
bool fastexport_bypass_lumaDenoise;
|
||||
bool fastexport_bypass_colorDenoise;
|
||||
//bool fastexport_bypass_lumaDenoise;
|
||||
//bool fastexport_bypass_colorDenoise;
|
||||
bool fastexport_bypass_defringe;
|
||||
bool fastexport_bypass_dirpyrDenoise;
|
||||
bool fastexport_bypass_sh_hq;
|
||||
|
@ -28,7 +28,11 @@ ParamsEdited::ParamsEdited () {
|
||||
|
||||
void ParamsEdited::set (bool v) {
|
||||
|
||||
toneCurve.curve = v;
|
||||
general.rank = v;
|
||||
general.colorlabel = v;
|
||||
general.intrash = v;
|
||||
|
||||
toneCurve.curve = v;
|
||||
toneCurve.brightness = v;
|
||||
toneCurve.black = v;
|
||||
toneCurve.contrast = v;
|
||||
@ -80,20 +84,20 @@ void ParamsEdited::set (bool v) {
|
||||
vibrance.protectskins = v;
|
||||
vibrance.avoidcolorshift = v;
|
||||
vibrance.pastsattog = v;
|
||||
colorBoost.amount = v;
|
||||
colorBoost.avoidclip = v;
|
||||
colorBoost.enable_saturationlimiter = v;
|
||||
colorBoost.saturationlimit = v;
|
||||
//colorBoost.amount = v;
|
||||
//colorBoost.avoidclip = v;
|
||||
//colorBoost.enable_saturationlimiter = v;
|
||||
//colorBoost.saturationlimit = v;
|
||||
wb.method = v;
|
||||
wb.green = v;
|
||||
wb.temperature = v;
|
||||
colorShift.a = v;
|
||||
colorShift.b = v;
|
||||
lumaDenoise.enabled = v;
|
||||
lumaDenoise.radius = v;
|
||||
lumaDenoise.edgetolerance = v;
|
||||
colorDenoise.enabled = v;
|
||||
colorDenoise.amount = v;
|
||||
//colorShift.a = v;
|
||||
//colorShift.b = v;
|
||||
//lumaDenoise.enabled = v;
|
||||
//lumaDenoise.radius = v;
|
||||
//lumaDenoise.edgetolerance = v;
|
||||
//colorDenoise.enabled = v;
|
||||
//colorDenoise.amount = v;
|
||||
defringe.enabled = v;
|
||||
defringe.radius = v;
|
||||
defringe.threshold = v;
|
||||
@ -176,7 +180,8 @@ void ParamsEdited::set (bool v) {
|
||||
raw.caBlue = v;
|
||||
raw.caRed = v;
|
||||
raw.greenEq = v;
|
||||
raw.hotDeadPixel = v;
|
||||
raw.hotDeadPixelFilter = v;
|
||||
raw.hotDeadPixelThresh = v;
|
||||
raw.linenoise = v;
|
||||
raw.darkFrame = v;
|
||||
raw.dfAuto = v;
|
||||
@ -199,8 +204,8 @@ void ParamsEdited::set (bool v) {
|
||||
hsvequalizer.hcurve = v;
|
||||
hsvequalizer.scurve = v;
|
||||
hsvequalizer.vcurve = v;
|
||||
exif.clear ();
|
||||
iptc.clear ();
|
||||
exif = v;
|
||||
iptc = v;
|
||||
}
|
||||
|
||||
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.avoidcolorshift = vibrance.avoidcolorshift && p.vibrance.avoidcolorshift == other.vibrance.avoidcolorshift;
|
||||
vibrance.pastsattog = vibrance.pastsattog && p.vibrance.pastsattog == other.vibrance.pastsattog;
|
||||
colorBoost.amount = colorBoost.amount && p.colorBoost.amount == other.colorBoost.amount;
|
||||
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.saturationlimit = colorBoost.saturationlimit && p.colorBoost.saturationlimit == other.colorBoost.saturationlimit;
|
||||
//colorBoost.amount = colorBoost.amount && p.colorBoost.amount == other.colorBoost.amount;
|
||||
//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.saturationlimit = colorBoost.saturationlimit && p.colorBoost.saturationlimit == other.colorBoost.saturationlimit;
|
||||
wb.method = wb.method && p.wb.method == other.wb.method;
|
||||
wb.green = wb.green && p.wb.green == other.wb.green;
|
||||
wb.temperature = wb.temperature && p.wb.temperature == other.wb.temperature;
|
||||
colorShift.a = colorShift.a && p.colorShift.a == other.colorShift.a;
|
||||
colorShift.b = colorShift.b && p.colorShift.b == other.colorShift.b;
|
||||
lumaDenoise.enabled = lumaDenoise.enabled && p.lumaDenoise.enabled == other.lumaDenoise.enabled;
|
||||
lumaDenoise.radius = lumaDenoise.radius && p.lumaDenoise.radius == other.lumaDenoise.radius;
|
||||
lumaDenoise.edgetolerance = lumaDenoise.edgetolerance && p.lumaDenoise.edgetolerance == other.lumaDenoise.edgetolerance;
|
||||
colorDenoise.enabled = colorDenoise.enabled && p.colorDenoise.enabled == other.colorDenoise.enabled;
|
||||
colorDenoise.amount = colorDenoise.amount && p.colorDenoise.amount == other.colorDenoise.amount;
|
||||
//colorShift.a = colorShift.a && p.colorShift.a == other.colorShift.a;
|
||||
//colorShift.b = colorShift.b && p.colorShift.b == other.colorShift.b;
|
||||
//lumaDenoise.enabled = lumaDenoise.enabled && p.lumaDenoise.enabled == other.lumaDenoise.enabled;
|
||||
//lumaDenoise.radius = lumaDenoise.radius && p.lumaDenoise.radius == other.lumaDenoise.radius;
|
||||
//lumaDenoise.edgetolerance = lumaDenoise.edgetolerance && p.lumaDenoise.edgetolerance == other.lumaDenoise.edgetolerance;
|
||||
//colorDenoise.enabled = colorDenoise.enabled && p.colorDenoise.enabled == other.colorDenoise.enabled;
|
||||
//colorDenoise.amount = colorDenoise.amount && p.colorDenoise.amount == other.colorDenoise.amount;
|
||||
defringe.enabled = defringe.enabled && p.defringe.enabled == other.defringe.enabled;
|
||||
defringe.radius = defringe.radius && p.defringe.radius == other.defringe.radius;
|
||||
defringe.threshold = defringe.threshold && p.defringe.threshold == other.defringe.threshold;
|
||||
@ -364,24 +369,25 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
|
||||
raw.dcbEnhance = raw.dcbEnhance && p.raw.dcb_enhance == other.raw.dcb_enhance;
|
||||
raw.allEnhance = raw.allEnhance && p.raw.all_enhance == other.raw.all_enhance;
|
||||
raw.caCorrection = raw.caCorrection && p.raw.ca_autocorrect == other.raw.ca_autocorrect;
|
||||
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.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.darkFrame = raw.darkFrame && p.raw.dark_frame == other.raw.dark_frame;
|
||||
raw.dfAuto = raw.dfAuto && p.raw.df_autoselect == other.raw.df_autoselect;
|
||||
raw.ff_file = raw.ff_file && p.raw.ff_file == other.raw.ff_file;
|
||||
raw.ff_file = raw.ff_file && p.raw.ff_file == other.raw.ff_file;
|
||||
raw.ff_AutoSelect = raw.ff_AutoSelect && p.raw.ff_AutoSelect == other.raw.ff_AutoSelect;
|
||||
raw.ff_BlurRadius = raw.ff_BlurRadius && p.raw.ff_BlurRadius == other.raw.ff_BlurRadius;
|
||||
raw.ff_BlurType = raw.ff_BlurType && p.raw.ff_BlurType == other.raw.ff_BlurType;
|
||||
raw.exPos = raw.exPos && p.raw.expos == other.raw.expos;
|
||||
raw.exPreser = raw.exPreser && p.raw.preser == other.raw.preser;
|
||||
raw.exBlackzero = raw.exBlackzero && p.raw.blackzero == other.raw.blackzero;
|
||||
raw.exBlackone = raw.exBlackone && p.raw.blackone == other.raw.blackone;
|
||||
raw.exBlacktwo = p.raw.blacktwo == other.raw.blacktwo;
|
||||
raw.exBlackthree = p.raw.blackthree == other.raw.blackthree;
|
||||
raw.exTwoGreen = p.raw.twogreen == other.raw.twogreen;
|
||||
raw.ff_BlurType = raw.ff_BlurType && p.raw.ff_BlurType == other.raw.ff_BlurType;
|
||||
raw.exPos = raw.exPos && p.raw.expos == other.raw.expos;
|
||||
raw.exPreser = raw.exPreser && p.raw.preser == other.raw.preser;
|
||||
raw.exBlackzero = raw.exBlackzero && p.raw.blackzero == other.raw.blackzero;
|
||||
raw.exBlackone = raw.exBlackone && p.raw.blackone == other.raw.blackone;
|
||||
raw.exBlacktwo = p.raw.blacktwo == other.raw.blacktwo;
|
||||
raw.exBlackthree = p.raw.blackthree == other.raw.blackthree;
|
||||
raw.exTwoGreen = p.raw.twogreen == other.raw.twogreen;
|
||||
|
||||
dirpyrequalizer.enabled = dirpyrequalizer.enabled && p.dirpyrequalizer.enabled == other.dirpyrequalizer.enabled;
|
||||
for(int i = 0; i < 8; i++) {
|
||||
@ -390,8 +396,10 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
|
||||
hsvequalizer.hcurve = hsvequalizer.hcurve && p.hsvequalizer.hcurve == other.hsvequalizer.hcurve;
|
||||
hsvequalizer.scurve = hsvequalizer.scurve && p.hsvequalizer.scurve == other.hsvequalizer.scurve;
|
||||
hsvequalizer.vcurve = hsvequalizer.vcurve && p.hsvequalizer.vcurve == other.hsvequalizer.vcurve;
|
||||
// exif = exif && p.exif==other.exif
|
||||
// iptc = other.iptc;
|
||||
|
||||
// How the hell can we handle that???
|
||||
// exif = exif && p.exif==other.exif
|
||||
// iptc = other.iptc;
|
||||
}
|
||||
}
|
||||
|
||||
@ -453,25 +461,21 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
||||
if (vibrance.protectskins) toEdit.vibrance.protectskins = mods.vibrance.protectskins;
|
||||
if (vibrance.avoidcolorshift) toEdit.vibrance.avoidcolorshift = mods.vibrance.avoidcolorshift;
|
||||
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.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 (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 (lumaDenoise.enabled) toEdit.lumaDenoise.enabled = mods.lumaDenoise.enabled;
|
||||
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 (colorDenoise.enabled) toEdit.colorDenoise.enabled = mods.colorDenoise.enabled;
|
||||
if (colorDenoise.amount) toEdit.colorDenoise.amount = mods.colorDenoise.amount;
|
||||
//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 (lumaDenoise.enabled) toEdit.lumaDenoise.enabled = mods.lumaDenoise.enabled;
|
||||
//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 (colorDenoise.enabled) toEdit.colorDenoise.enabled = mods.colorDenoise.enabled;
|
||||
//if (colorDenoise.amount) toEdit.colorDenoise.amount = mods.colorDenoise.amount;
|
||||
|
||||
if (defringe.enabled) toEdit.defringe.enabled = mods.defringe.enabled;
|
||||
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.vflip) toEdit.coarse.vflip = mods.coarse.vflip ? !toEdit.coarse.vflip : toEdit.coarse.vflip;
|
||||
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.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;
|
||||
@ -547,7 +551,7 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
||||
if (icm.gampos) toEdit.icm.gampos = dontforceSet && options.baBehav[ADDSET_FREE_OUPUT_GAMMA] ? toEdit.icm.gampos + mods.icm.gampos : mods.icm.gampos;
|
||||
if (icm.slpos) toEdit.icm.slpos = dontforceSet && options.baBehav[ADDSET_FREE_OUTPUT_SLOPE] ? toEdit.icm.slpos + mods.icm.slpos : mods.icm.slpos;
|
||||
if (icm.gamma) toEdit.icm.gamma = mods.icm.gamma;
|
||||
if (icm.freegamma) toEdit.icm.freegamma = mods.icm.freegamma;
|
||||
if (icm.freegamma) toEdit.icm.freegamma = mods.icm.freegamma;
|
||||
if (raw.ccSteps) toEdit.raw.ccSteps = mods.raw.ccSteps;
|
||||
if (raw.dmethod) toEdit.raw.dmethod = mods.raw.dmethod;
|
||||
if (raw.dcbIterations) toEdit.raw.dcb_iterations = mods.raw.dcb_iterations;
|
||||
@ -565,11 +569,12 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
||||
if (raw.exBlackthree) toEdit.raw.blackthree = dontforceSet && options.baBehav[ADDSET_RAWEXPOS_BLACKS] ? toEdit.raw.blackthree + mods.raw.blackthree : mods.raw.blackthree;
|
||||
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.hotDeadPixel) toEdit.raw.hotdeadpix_filt = mods.raw.hotdeadpix_filt;
|
||||
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.dfAuto) toEdit.raw.df_autoselect = mods.raw.df_autoselect;
|
||||
if (raw.greenEq) toEdit.raw.greenthresh = dontforceSet && options.baBehav[ADDSET_PREPROCESS_GREENEQUIL] ? toEdit.raw.greenthresh + mods.raw.greenthresh : mods.raw.greenthresh;
|
||||
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.darkFrame) toEdit.raw.dark_frame = mods.raw.dark_frame;
|
||||
if (raw.dfAuto) toEdit.raw.df_autoselect = mods.raw.df_autoselect;
|
||||
|
||||
if (raw.ff_file) toEdit.raw.ff_file = mods.raw.ff_file;
|
||||
if (raw.ff_AutoSelect) toEdit.raw.ff_AutoSelect = mods.raw.ff_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.vcurve) toEdit.hsvequalizer.vcurve = mods.hsvequalizer.vcurve;
|
||||
|
||||
// if (exif) toEdit.exif==mo.exif = mods.exif==other.exif;
|
||||
// if (iptc;) toEdit.iptc==other.iptc; = mods.iptc==other.iptc;;
|
||||
// Exif changes are added to the existing ones
|
||||
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 {
|
||||
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;
|
||||
}
|
||||
|
@ -21,8 +21,16 @@
|
||||
|
||||
#include <glibmm.h>
|
||||
#include <vector>
|
||||
#include "../rtengine/rtengine.h"
|
||||
#include "../rtengine/procparams.h"
|
||||
#include "../rtengine/rtengine.h"
|
||||
|
||||
class GeneralParamsEdited {
|
||||
|
||||
public:
|
||||
bool rank;
|
||||
bool colorlabel;
|
||||
bool intrash;
|
||||
};
|
||||
|
||||
class ToneCurveParamsEdited {
|
||||
|
||||
@ -111,14 +119,14 @@ class VibranceParamsEdited {
|
||||
bool pastsattog;
|
||||
};
|
||||
|
||||
class ColorBoostParamsEdited {
|
||||
/*class ColorBoostParamsEdited {
|
||||
|
||||
public:
|
||||
bool amount;
|
||||
bool avoidclip;
|
||||
bool enable_saturationlimiter;
|
||||
bool saturationlimit;
|
||||
};
|
||||
};*/
|
||||
|
||||
class WBParamsEdited {
|
||||
|
||||
@ -128,27 +136,27 @@ class WBParamsEdited {
|
||||
bool green;
|
||||
};
|
||||
|
||||
class ColorShiftParamsEdited {
|
||||
/*class ColorShiftParamsEdited {
|
||||
|
||||
public:
|
||||
bool a;
|
||||
bool b;
|
||||
};
|
||||
};*/
|
||||
|
||||
class LumaDenoiseParamsEdited {
|
||||
/*class LumaDenoiseParamsEdited {
|
||||
|
||||
public:
|
||||
bool enabled;
|
||||
bool radius;
|
||||
bool edgetolerance;
|
||||
};
|
||||
};*/
|
||||
|
||||
class ColorDenoiseParamsEdited {
|
||||
/*class ColorDenoiseParamsEdited {
|
||||
|
||||
public:
|
||||
bool enabled;
|
||||
bool amount;
|
||||
};
|
||||
};*/
|
||||
|
||||
class DefringeParamsEdited {
|
||||
|
||||
@ -326,47 +334,35 @@ class RAWParamsEdited {
|
||||
bool dmethod;
|
||||
bool dcbIterations;
|
||||
bool dcbEnhance;
|
||||
bool allEnhance;
|
||||
bool allEnhance;
|
||||
bool caCorrection;
|
||||
bool caRed;
|
||||
bool caBlue;
|
||||
bool caRed;
|
||||
bool caBlue;
|
||||
bool greenEq;
|
||||
bool hotDeadPixel;
|
||||
bool hotDeadPixelFilter;
|
||||
bool hotDeadPixelThresh;
|
||||
bool linenoise;
|
||||
bool darkFrame;
|
||||
bool dfAuto;
|
||||
bool ff_file;
|
||||
bool ff_AutoSelect;
|
||||
bool ff_BlurRadius;
|
||||
bool ff_BlurType;
|
||||
bool exPos;
|
||||
bool exPreser;
|
||||
bool exBlackzero;
|
||||
bool exBlackone;
|
||||
bool exBlacktwo;
|
||||
bool exBlackthree;
|
||||
bool exTwoGreen;
|
||||
bool ff_file;
|
||||
bool ff_AutoSelect;
|
||||
bool ff_BlurRadius;
|
||||
bool ff_BlurType;
|
||||
bool exPos;
|
||||
bool exPreser;
|
||||
bool exBlackzero;
|
||||
bool exBlackone;
|
||||
bool exBlacktwo;
|
||||
bool exBlackthree;
|
||||
bool exTwoGreen;
|
||||
|
||||
bool isUnchanged() const;
|
||||
};
|
||||
|
||||
class ExifPairEdited {
|
||||
|
||||
public:
|
||||
Glib::ustring field;
|
||||
bool value;
|
||||
};
|
||||
|
||||
class IPTCPairEdited {
|
||||
|
||||
public:
|
||||
Glib::ustring field;
|
||||
bool values;
|
||||
};
|
||||
|
||||
class ParamsEdited {
|
||||
|
||||
public:
|
||||
GeneralParamsEdited general;
|
||||
ToneCurveParamsEdited toneCurve;
|
||||
LCurveParamsEdited labCurve;
|
||||
RGBCurvesParamsEdited rgbCurves;
|
||||
@ -374,22 +370,22 @@ class ParamsEdited {
|
||||
SharpenEdgeParamsEdited sharpenEdge;
|
||||
SharpenMicroParamsEdited sharpenMicro;
|
||||
VibranceParamsEdited vibrance;
|
||||
ColorBoostParamsEdited colorBoost;
|
||||
//ColorBoostParamsEdited colorBoost;
|
||||
WBParamsEdited wb;
|
||||
ColorShiftParamsEdited colorShift;
|
||||
LumaDenoiseParamsEdited lumaDenoise;
|
||||
ColorDenoiseParamsEdited colorDenoise;
|
||||
//ColorShiftParamsEdited colorShift;
|
||||
//LumaDenoiseParamsEdited lumaDenoise;
|
||||
//ColorDenoiseParamsEdited colorDenoise;
|
||||
DefringeParamsEdited defringe;
|
||||
DirPyrDenoiseParamsEdited dirpyrDenoise;
|
||||
EPDParamsEdited edgePreservingDecompositionUI;
|
||||
EPDParamsEdited edgePreservingDecompositionUI;
|
||||
ImpulseDenoiseParamsEdited impulseDenoise;
|
||||
SHParamsEdited sh;
|
||||
CropParamsEdited crop;
|
||||
CoarseTransformParamsEdited coarse;
|
||||
CommonTransformParamsEdited commonTrans;
|
||||
CommonTransformParamsEdited commonTrans;
|
||||
RotateParamsEdited rotate;
|
||||
DistortionParamsEdited distortion;
|
||||
PerspectiveParamsEdited perspective;
|
||||
PerspectiveParamsEdited perspective;
|
||||
CACorrParamsEdited cacorrection;
|
||||
VignettingParamsEdited vignetting;
|
||||
ChannelMixerParamsEdited chmixer;
|
||||
@ -399,8 +395,8 @@ class ParamsEdited {
|
||||
RAWParamsEdited raw;
|
||||
DirPyrEqualizerParamsEdited dirpyrequalizer;
|
||||
HSVEqualizerParamsEdited hsvequalizer;
|
||||
std::vector<ExifPairEdited> exif;
|
||||
std::vector<IPTCPairEdited> iptc;
|
||||
bool exif;
|
||||
bool iptc;
|
||||
|
||||
ParamsEdited ();
|
||||
|
||||
|
@ -18,11 +18,12 @@
|
||||
*/
|
||||
#include "partialpastedlg.h"
|
||||
#include "multilangmgr.h"
|
||||
#include "paramsedited.h"
|
||||
|
||||
PartialPasteDlg::PartialPasteDlg () {
|
||||
PartialPasteDlg::PartialPasteDlg (Glib::ustring title) {
|
||||
|
||||
set_modal (true);
|
||||
set_title (M("PARTIALPASTE_DIALOGLABEL"));
|
||||
set_title (title);
|
||||
|
||||
everything = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EVERYTHING")));
|
||||
everything ->set_name("partialPasteHeader");
|
||||
@ -47,6 +48,7 @@ PartialPasteDlg::PartialPasteDlg () {
|
||||
exposure = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXPOSURE")));
|
||||
hlrec = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_HLRECONSTRUCTION")));
|
||||
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")));
|
||||
|
||||
// options in detail:
|
||||
@ -56,7 +58,6 @@ PartialPasteDlg::PartialPasteDlg () {
|
||||
impden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IMPULSEDENOISE")));
|
||||
dirpyreq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYREQUALIZER")));
|
||||
defringe = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DEFRINGE")));
|
||||
edgePreservingDecompositionUI = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EPD")));
|
||||
|
||||
// options in color:
|
||||
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 (*hlrec, 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[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 (*dirpyrden, 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 (*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));
|
||||
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));
|
||||
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));
|
||||
|
||||
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));
|
||||
//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));
|
||||
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));
|
||||
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_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-cancel"), 0);
|
||||
set_response_sensitive (1);
|
||||
set_default_response (1);
|
||||
add_button (Gtk::StockID("gtk-ok"), Gtk::RESPONSE_OK);
|
||||
add_button (Gtk::StockID("gtk-cancel"), Gtk::RESPONSE_CANCEL);
|
||||
set_response_sensitive (Gtk::RESPONSE_OK);
|
||||
set_default_response (Gtk::RESPONSE_OK);
|
||||
show_all_children ();
|
||||
}
|
||||
|
||||
@ -414,6 +415,7 @@ void PartialPasteDlg::basicToggled () {
|
||||
exposureConn.block (true);
|
||||
hlrecConn.block (true);
|
||||
shConn.block (true);
|
||||
epdConn.block(true);
|
||||
labcurveConn.block (true);
|
||||
|
||||
basic->set_inconsistent (false);
|
||||
@ -422,13 +424,15 @@ void PartialPasteDlg::basicToggled () {
|
||||
exposure->set_active (basic->get_active ());
|
||||
hlrec->set_active (basic->get_active ());
|
||||
sh->set_active (basic->get_active ());
|
||||
epd->set_active (basic->get_active ());
|
||||
labcurve->set_active (basic->get_active ());
|
||||
|
||||
wbConn.block (false);
|
||||
exposureConn.block (false);
|
||||
hlrecConn.block (false);
|
||||
labcurveConn.block (false);
|
||||
shConn.block (false);
|
||||
epdConn.block (false);
|
||||
labcurveConn.block (false);
|
||||
}
|
||||
|
||||
void PartialPasteDlg::detailToggled () {
|
||||
@ -439,7 +443,6 @@ void PartialPasteDlg::detailToggled () {
|
||||
impdenConn.block (true);
|
||||
dirpyrdenConn.block (true);
|
||||
defringeConn.block (true);
|
||||
edgePreservingDecompositionUIConn.block(true);
|
||||
dirpyreqConn.block (true);
|
||||
//waveqConn.block (true);
|
||||
|
||||
@ -448,10 +451,9 @@ void PartialPasteDlg::detailToggled () {
|
||||
sharpen->set_active (detail->get_active ());
|
||||
sharpenedge->set_active (detail->get_active ());
|
||||
sharpenmicro->set_active (detail->get_active ());
|
||||
impden->set_active (detail->get_active ());
|
||||
impden->set_active (detail->get_active ());
|
||||
dirpyrden->set_active (detail->get_active ());
|
||||
defringe->set_active (detail->get_active ());
|
||||
edgePreservingDecompositionUI->set_active (detail->get_active ());
|
||||
dirpyreq->set_active (detail->get_active ());
|
||||
//waveq->set_active (detail->get_active ());
|
||||
|
||||
@ -461,32 +463,31 @@ void PartialPasteDlg::detailToggled () {
|
||||
impdenConn.block (false);
|
||||
dirpyrdenConn.block (false);
|
||||
defringeConn.block (false);
|
||||
edgePreservingDecompositionUIConn.block (false);
|
||||
dirpyreqConn.block (false);
|
||||
//waveqConn.block (false);
|
||||
}
|
||||
|
||||
void PartialPasteDlg::colorToggled () {
|
||||
|
||||
vibranceConn.block (true);
|
||||
vibranceConn.block (true);
|
||||
chmixerConn.block (true);
|
||||
hsveqConn.block (true);
|
||||
rgbcurvesConn.block (true);
|
||||
gamcsconn.block (true);
|
||||
gamcsconn.block (true);
|
||||
color->set_inconsistent (false);
|
||||
|
||||
vibrance->set_active (color->get_active ());
|
||||
chmixer->set_active (color->get_active ());
|
||||
hsveq->set_active (color->get_active ());
|
||||
rgbcurves->set_active (color->get_active ());
|
||||
icm->set_active (color->get_active ());
|
||||
|
||||
vibranceConn.block (false);
|
||||
hsveq->set_active (color->get_active ());
|
||||
rgbcurves->set_active (color->get_active ());
|
||||
icm->set_active (color->get_active ());
|
||||
|
||||
vibranceConn.block (false);
|
||||
chmixerConn.block (false);
|
||||
hsveqConn.block (false);
|
||||
rgbcurvesConn.block (false);
|
||||
gamcsconn.block (false);
|
||||
|
||||
gamcsconn.block (false);
|
||||
|
||||
}
|
||||
|
||||
void PartialPasteDlg::lensToggled () {
|
||||
@ -537,7 +538,7 @@ void PartialPasteDlg::metaicmToggled () {
|
||||
exifchConn.block (true);
|
||||
iptcConn.block (true);
|
||||
icmConn.block (true);
|
||||
gamcsconn.block (true);
|
||||
gamcsconn.block (true);
|
||||
metaicm->set_inconsistent (false);
|
||||
|
||||
exifch->set_active (metaicm->get_active ());
|
||||
@ -548,75 +549,99 @@ void PartialPasteDlg::metaicmToggled () {
|
||||
exifchConn.block (false);
|
||||
iptcConn.block (false);
|
||||
icmConn.block (false);
|
||||
gamcsconn.block (false);
|
||||
gamcsconn.block (false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
if (exposure->get_active ()) dst->toneCurve = src->toneCurve;
|
||||
if (hlrec->get_active ()) dst->hlrecovery = src->hlrecovery;
|
||||
if (sh->get_active ()) dst->sh = src->sh;
|
||||
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;
|
||||
ParamsEdited falsePE; // falsePE is a workaround to set a group of ParamsEdited to false
|
||||
ParamsEdited filterPE; // Contains the initial information about the loaded values
|
||||
if (srcPE) {
|
||||
filterPE = *srcPE;
|
||||
}
|
||||
if (raw_ca_autocorrect->get_active ()) dst->raw.ca_autocorrect =src->raw.ca_autocorrect;
|
||||
if (raw_cared->get_active ()) dst->raw.cared =src->raw.cared;
|
||||
if (raw_cablue->get_active ()) dst->raw.cablue =src->raw.cablue;
|
||||
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;
|
||||
if (df_AutoSelect->get_active ()) dst->raw.df_autoselect = src->raw.df_autoselect;
|
||||
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;
|
||||
if (ff_BlurType->get_active ()) dst->raw.ff_BlurType = src->raw.ff_BlurType;
|
||||
else {
|
||||
// By default, everything has to be copied
|
||||
filterPE.set(true);
|
||||
}
|
||||
|
||||
|
||||
// the general section is always ignored, whichever operation we use the PartialPaste for
|
||||
filterPE.general = falsePE.general;
|
||||
|
||||
|
||||
// Now we filter out the filter depending on the checked items
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ class PartialPasteDlg : public Gtk::Dialog {
|
||||
|
||||
public:
|
||||
|
||||
Gtk::CheckButton* everything;
|
||||
Gtk::CheckButton* everything;
|
||||
|
||||
// main groups:
|
||||
Gtk::CheckButton* basic;
|
||||
@ -42,24 +42,24 @@ class PartialPasteDlg : public Gtk::Dialog {
|
||||
Gtk::CheckButton* exposure;
|
||||
Gtk::CheckButton* hlrec;
|
||||
Gtk::CheckButton* sh;
|
||||
Gtk::CheckButton* epd;
|
||||
Gtk::CheckButton* labcurve;
|
||||
|
||||
// options in detail:
|
||||
Gtk::CheckButton* sharpen;
|
||||
Gtk::CheckButton* sharpenedge;
|
||||
Gtk::CheckButton* sharpenmicro;
|
||||
Gtk::CheckButton* impden;
|
||||
Gtk::CheckButton* waveq;
|
||||
Gtk::CheckButton* dirpyrden;
|
||||
Gtk::CheckButton* defringe;
|
||||
Gtk::CheckButton* edgePreservingDecompositionUI;
|
||||
Gtk::CheckButton* dirpyreq;
|
||||
Gtk::CheckButton* impden;
|
||||
//Gtk::CheckButton* waveq;
|
||||
Gtk::CheckButton* dirpyrden;
|
||||
Gtk::CheckButton* defringe;
|
||||
Gtk::CheckButton* dirpyreq;
|
||||
|
||||
// options in color:
|
||||
Gtk::CheckButton* vibrance;
|
||||
Gtk::CheckButton* chmixer;
|
||||
Gtk::CheckButton* hsveq;
|
||||
Gtk::CheckButton* rgbcurves;
|
||||
Gtk::CheckButton* hsveq;
|
||||
Gtk::CheckButton* rgbcurves;
|
||||
// Gtk::CheckButton* icm;
|
||||
|
||||
// options in lens:
|
||||
@ -96,18 +96,18 @@ class PartialPasteDlg : public Gtk::Dialog {
|
||||
Gtk::CheckButton* raw_dcb_iterations;
|
||||
Gtk::CheckButton* raw_dcb_enhance;
|
||||
Gtk::CheckButton* raw_all_enhance;
|
||||
|
||||
|
||||
Gtk::CheckButton* df_file;
|
||||
Gtk::CheckButton* df_AutoSelect;
|
||||
Gtk::CheckButton* ff_file;
|
||||
Gtk::CheckButton* ff_AutoSelect;
|
||||
Gtk::CheckButton* ff_BlurRadius;
|
||||
Gtk::CheckButton* ff_BlurType;
|
||||
Gtk::CheckButton* df_AutoSelect;
|
||||
Gtk::CheckButton* ff_file;
|
||||
Gtk::CheckButton* ff_AutoSelect;
|
||||
Gtk::CheckButton* ff_BlurRadius;
|
||||
Gtk::CheckButton* ff_BlurType;
|
||||
|
||||
sigc::connection everythingConn, basicConn, detailConn, colorConn, lensConn, compositionConn, metaicmConn, rawConn;;
|
||||
|
||||
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 distortionConn, cacorrConn, vignettingConn;
|
||||
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, perspectiveConn, commonTransConn;
|
||||
@ -115,19 +115,19 @@ class PartialPasteDlg : public Gtk::Dialog {
|
||||
sigc::connection df_fileConn, df_AutoSelectConn, ff_fileConn, ff_AutoSelectConn, ff_BlurRadiusConn, ff_BlurTypeConn;
|
||||
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:
|
||||
PartialPasteDlg ();
|
||||
public:
|
||||
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 basicToggled ();
|
||||
void detailToggled ();
|
||||
void colorToggled ();
|
||||
void lensToggled ();
|
||||
void compositionToggled ();
|
||||
void metaicmToggled ();
|
||||
void rawToggled ();
|
||||
void everythingToggled ();
|
||||
void basicToggled ();
|
||||
void detailToggled ();
|
||||
void colorToggled ();
|
||||
void lensToggled ();
|
||||
void compositionToggled ();
|
||||
void metaicmToggled ();
|
||||
void rawToggled ();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -57,7 +57,7 @@ void PreProcess::read(const rtengine::procparams::ProcParams* pp, const ParamsEd
|
||||
hdpixelconn.block (true);
|
||||
|
||||
if(pedited ){
|
||||
hotDeadPixel->set_inconsistent (!pedited->raw.hotDeadPixel);
|
||||
hotDeadPixel->set_inconsistent (!pedited->raw.hotDeadPixelFilter);
|
||||
lineDenoise->setEditedState( pedited->raw.linenoise ? Edited : UnEdited );
|
||||
greenEqThreshold->setEditedState( pedited->raw.greenEq ? Edited : UnEdited );
|
||||
}
|
||||
@ -81,7 +81,7 @@ void PreProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedi
|
||||
if (pedited) {
|
||||
pedited->raw.linenoise = lineDenoise->getEditedState ();
|
||||
pedited->raw.greenEq= greenEqThreshold->getEditedState ();
|
||||
pedited->raw.hotDeadPixel = !hotDeadPixel->get_inconsistent();
|
||||
pedited->raw.hotDeadPixelFilter = !hotDeadPixel->get_inconsistent();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
class ProfileChangeListener {
|
||||
|
||||
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) {}
|
||||
};
|
||||
|
||||
|
@ -29,7 +29,18 @@ using namespace rtengine::procparams;
|
||||
|
||||
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;
|
||||
|
||||
@ -40,25 +51,25 @@ ProfilePanel::ProfilePanel () {
|
||||
|
||||
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->add (*Gtk::manage (new RTImage ("gtk-open.png")));
|
||||
copy = Gtk::manage (new Gtk::Button ());
|
||||
copy->add (*Gtk::manage (new RTImage ("edit-copy.png")));
|
||||
if (!readOnly) save = Gtk::manage (new Gtk::Button ());
|
||||
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->add (*Gtk::manage (new RTImage ("edit-paste.png")));
|
||||
|
||||
hbox->pack_start (*profiles);
|
||||
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 (*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) );
|
||||
save->signal_clicked().connect( sigc::mem_fun(*this, &ProfilePanel::save_clicked) );
|
||||
copy->signal_clicked().connect( sigc::mem_fun(*this, &ProfilePanel::copy_clicked) );
|
||||
paste->signal_clicked().connect( sigc::mem_fun(*this, &ProfilePanel::paste_clicked) );
|
||||
load->signal_button_release_event().connect_notify( sigc::mem_fun(*this, &ProfilePanel::load_clicked) );
|
||||
if (!readOnly) save->signal_button_release_event().connect_notify( sigc::mem_fun(*this, &ProfilePanel::save_clicked) );
|
||||
if (!readOnly) copy->signal_button_release_event().connect_notify( sigc::mem_fun(*this, &ProfilePanel::copy_clicked) );
|
||||
paste->signal_button_release_event().connect_notify( sigc::mem_fun(*this, &ProfilePanel::paste_clicked) );
|
||||
|
||||
custom = NULL;
|
||||
lastphoto = NULL;
|
||||
@ -71,9 +82,9 @@ ProfilePanel::ProfilePanel () {
|
||||
old = profiles->get_active_text();
|
||||
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"));
|
||||
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"));
|
||||
|
||||
show_all_children ();
|
||||
@ -81,9 +92,9 @@ ProfilePanel::ProfilePanel () {
|
||||
|
||||
ProfilePanel::~ProfilePanel () {
|
||||
|
||||
delete custom;
|
||||
delete lastsaved;
|
||||
delete lastphoto;
|
||||
if (custom) { custom->deleteInstance(); delete custom; }
|
||||
if (lastsaved) { lastsaved->deleteInstance(); delete lastsaved; }
|
||||
if (lastphoto) { lastphoto->deleteInstance(); delete lastphoto; }
|
||||
}
|
||||
|
||||
void ProfilePanel::refreshProfileList () {
|
||||
@ -98,7 +109,7 @@ void ProfilePanel::refreshProfileList () {
|
||||
// re-parse profile directories (deletes old ones)
|
||||
profileStore.parseProfiles ();
|
||||
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]);
|
||||
|
||||
if (custom)
|
||||
@ -112,10 +123,15 @@ void ProfilePanel::refreshProfileList () {
|
||||
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);
|
||||
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);
|
||||
else
|
||||
dialog.set_current_folder (argv0 + "/" + options.profilePath);
|
||||
@ -140,54 +156,85 @@ void ProfilePanel::save_clicked () {
|
||||
|
||||
savedialog = &dialog;
|
||||
|
||||
int result = dialog.run();
|
||||
bool done = false;
|
||||
do {
|
||||
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;
|
||||
int dotpos = fname.find_last_of ('.');
|
||||
if (dotpos==Glib::ustring::npos)
|
||||
hasext = false;
|
||||
int dirpos1 = fname.find_last_of ('/');
|
||||
if (dirpos1!=Glib::ustring::npos && dirpos1>dotpos)
|
||||
hasext = false;
|
||||
int dirpos2 = fname.find_last_of ('\\');
|
||||
if (dirpos2!=Glib::ustring::npos && dirpos2>dotpos)
|
||||
hasext = false;
|
||||
bool hasext = true;
|
||||
int dotpos = fname.find_last_of ('.');
|
||||
if (dotpos==Glib::ustring::npos)
|
||||
hasext = false;
|
||||
int dirpos1 = fname.find_last_of ('/');
|
||||
if (dirpos1!=Glib::ustring::npos && dirpos1>dotpos)
|
||||
hasext = false;
|
||||
int dirpos2 = fname.find_last_of ('\\');
|
||||
if (dirpos2!=Glib::ustring::npos && dirpos2>dotpos)
|
||||
hasext = false;
|
||||
|
||||
if (!hasext)
|
||||
fname = fname + paramFileExtension;
|
||||
if (!hasext)
|
||||
fname = fname + paramFileExtension;
|
||||
|
||||
if (safe_file_test (fname, Glib::FILE_TEST_EXISTS)) {
|
||||
Glib::ustring msg_ = Glib::ustring("<b>") + fname + ": " + M("MAIN_MSG_ALREADYEXISTS") + "\n" + M("MAIN_MSG_QOVERWRITE") + "</b>";
|
||||
Gtk::MessageDialog msgd (msg_, true, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_YES_NO, true);
|
||||
int response = msgd.run ();
|
||||
if (response==Gtk::RESPONSE_NO)
|
||||
return;
|
||||
if (safe_file_test (fname, Glib::FILE_TEST_EXISTS)) {
|
||||
Glib::ustring msg_ = Glib::ustring("<b>") + fname + ": " + M("MAIN_MSG_ALREADYEXISTS") + "\n" + M("MAIN_MSG_QOVERWRITE") + "</b>";
|
||||
Gtk::MessageDialog msgd (msg_, true, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_YES_NO, true);
|
||||
int response = msgd.run ();
|
||||
if (response==Gtk::RESPONSE_NO)
|
||||
// make another try
|
||||
continue;
|
||||
}
|
||||
|
||||
PartialProfile* toSave = NULL;
|
||||
if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")")
|
||||
toSave = custom;
|
||||
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTSAVED") + ")")
|
||||
toSave = lastsaved;
|
||||
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTPHOTO") + ")")
|
||||
toSave = lastphoto;
|
||||
else
|
||||
toSave = profileStore.getProfile (profiles->get_active_text());
|
||||
|
||||
if (toSave) {
|
||||
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 ();
|
||||
}
|
||||
}
|
||||
|
||||
ProcParams* toSave = NULL;
|
||||
if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")")
|
||||
toSave = custom;
|
||||
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTSAVED") + ")")
|
||||
toSave = lastsaved;
|
||||
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTPHOTO") + ")")
|
||||
toSave = lastphoto;
|
||||
else
|
||||
toSave = profileStore.getProfile (profiles->get_active_text());
|
||||
|
||||
if (toSave) {
|
||||
toSave->save (fname);
|
||||
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") + ")")
|
||||
toSave = custom;
|
||||
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTSAVED") + ")")
|
||||
@ -196,15 +243,41 @@ void ProfilePanel::copy_clicked () {
|
||||
toSave = lastphoto;
|
||||
else
|
||||
toSave = profileStore.getProfile (profiles->get_active_text());
|
||||
|
||||
if (toSave)
|
||||
clipboard.setProcParams (*toSave);
|
||||
|
||||
// toSave has to be a complete procparams
|
||||
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);
|
||||
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);
|
||||
else
|
||||
dialog.set_current_folder (argv0 + "/" + options.profilePath);
|
||||
@ -226,65 +299,100 @@ void ProfilePanel::load_clicked () {
|
||||
dialog.add_filter(filter_any);
|
||||
|
||||
int result = dialog.run();
|
||||
dialog.hide();
|
||||
|
||||
if (result==Gtk::RESPONSE_OK) {
|
||||
if (!custom) {
|
||||
custom = new ProcParams ();
|
||||
profiles->append_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
||||
bool prevState = changeconn.block(true);
|
||||
Glib::ustring fname = dialog.get_filename();
|
||||
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;
|
||||
}
|
||||
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") + ")");
|
||||
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"));
|
||||
}
|
||||
else if (customCreated) {
|
||||
// we delete custom
|
||||
custom->deleteInstance();
|
||||
delete custom;
|
||||
}
|
||||
custom->load (dialog.get_filename());
|
||||
profiles->set_active_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
||||
old = profiles->get_active_text();
|
||||
changeTo (custom, M("PROFILEPANEL_PFILE"));
|
||||
}
|
||||
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())
|
||||
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) {
|
||||
custom = new ProcParams ();
|
||||
custom = new PartialProfile (true);
|
||||
custom->pedited->set(true);
|
||||
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") + ")");
|
||||
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"));
|
||||
return;
|
||||
}
|
||||
|
||||
void ProfilePanel::changeTo (ProcParams* newpp, Glib::ustring profname) {
|
||||
void ProfilePanel::changeTo (PartialProfile* newpp, Glib::ustring profname) {
|
||||
|
||||
if (!newpp)
|
||||
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)
|
||||
tpc->profileChange (newpp, EvProfileChanged, profname);
|
||||
}
|
||||
@ -300,7 +408,7 @@ void ProfilePanel::selection_changed () {
|
||||
else if (profiles->get_active_text() == Glib::ustring("(") + M("PROFILEPANEL_PLASTPHOTO") + ")")
|
||||
changeTo (lastphoto, Glib::ustring("(") + M("PROFILEPANEL_PLASTPHOTO") + ")");
|
||||
else {
|
||||
ProcParams* s = profileStore.getProfile (profiles->get_active_text());
|
||||
PartialProfile* s = profileStore.getProfile (profiles->get_active_text());
|
||||
if (s)
|
||||
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) {
|
||||
|
||||
// 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)
|
||||
return;
|
||||
|
||||
if (profiles->get_active_text() != Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")") {
|
||||
dontupdate = true;
|
||||
if (!custom) {
|
||||
custom = new ProcParams ();
|
||||
custom = new PartialProfile (true);
|
||||
custom->set(true);
|
||||
profiles->append_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
||||
}
|
||||
*custom = *p;
|
||||
profiles->set_active_text (Glib::ustring("(") + M("PROFILEPANEL_PCUSTOM") + ")");
|
||||
old = profiles->get_active_text();
|
||||
}
|
||||
else
|
||||
*custom = *p;
|
||||
*(custom->pparams) = *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) {
|
||||
|
||||
changeconn.block (true);
|
||||
@ -336,18 +446,36 @@ void ProfilePanel::initProfile (const Glib::ustring& profname, ProcParams* lastS
|
||||
pparams.clear ();
|
||||
|
||||
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]);
|
||||
|
||||
delete custom;
|
||||
custom = NULL;
|
||||
delete lastsaved;
|
||||
lastsaved = lastSaved;
|
||||
delete lastphoto;
|
||||
lastphoto = lastPhoto;
|
||||
|
||||
if (custom) {
|
||||
custom->deleteInstance();
|
||||
delete custom; custom = NULL;
|
||||
}
|
||||
|
||||
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;
|
||||
ProcParams* defprofile = profileStore.getProfile (profname);
|
||||
PartialProfile* defprofile = profileStore.getProfile (profname);
|
||||
|
||||
if (lastphoto)
|
||||
profiles->append_text (Glib::ustring("(") + M("PROFILEPANEL_PLASTPHOTO") + ")");
|
||||
@ -360,9 +488,9 @@ void ProfilePanel::initProfile (const Glib::ustring& profname, ProcParams* lastS
|
||||
|
||||
if (tpc) {
|
||||
if (lastsaved)
|
||||
tpc->setDefaults (lastsaved);
|
||||
tpc->setDefaults (lastsaved->pparams);
|
||||
else
|
||||
tpc->setDefaults (profileStore.getProfile (profname));
|
||||
tpc->setDefaults (profileStore.getProfile (profname)->pparams);
|
||||
}
|
||||
if (defprofile) {
|
||||
old = defline;
|
||||
@ -372,16 +500,26 @@ void ProfilePanel::initProfile (const Glib::ustring& profname, ProcParams* lastS
|
||||
tpc->profileChange (defprofile, EvPhotoLoaded, defline);
|
||||
}
|
||||
else {
|
||||
bool dels = false;
|
||||
// select first valid profile
|
||||
old = "";
|
||||
profiles->set_active (0);
|
||||
ProcParams* s = profileStore.getProfile (profiles->get_active_text());
|
||||
if (!s)
|
||||
s = new ProcParams ();
|
||||
PartialProfile* s = profileStore.getProfile (profiles->get_active_text());
|
||||
if (!s) {
|
||||
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);
|
||||
if (tpc)
|
||||
tpc->profileChange (s, EvPhotoLoaded, profiles->get_active_text());
|
||||
|
||||
if (dels) {
|
||||
s->deleteInstance();
|
||||
delete s;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -24,47 +24,52 @@
|
||||
#include "../rtengine/rtengine.h"
|
||||
#include "pparamschangelistener.h"
|
||||
#include "profilechangelistener.h"
|
||||
#include "partialpastedlg.h"
|
||||
#include "guiutils.h"
|
||||
|
||||
class ProfilePanel : public Gtk::VBox, public PParamsChangeListener {
|
||||
|
||||
protected:
|
||||
|
||||
static PartialPasteDlg* partialProfileDlg;
|
||||
Gtk::Button* save;
|
||||
Gtk::Button* load;
|
||||
Gtk::Button* copy;
|
||||
Gtk::Button* paste;
|
||||
MyComboBoxText* profiles;
|
||||
std::vector<Glib::ustring> pparams;
|
||||
rtengine::procparams::ProcParams* custom;
|
||||
rtengine::procparams::ProcParams* lastsaved;
|
||||
rtengine::procparams::ProcParams* lastphoto;
|
||||
rtengine::procparams::PartialProfile* custom;
|
||||
rtengine::procparams::PartialProfile* lastsaved;
|
||||
rtengine::procparams::PartialProfile* lastphoto;
|
||||
Glib::ustring old;
|
||||
ProfileChangeListener* tpc;
|
||||
bool dontupdate;
|
||||
sigc::connection changeconn;
|
||||
Gtk::FileChooserDialog* savedialog;
|
||||
|
||||
void changeTo (rtengine::procparams::ProcParams* newpp, Glib::ustring profname);
|
||||
void changeTo (rtengine::procparams::PartialProfile* newpp, Glib::ustring profname);
|
||||
void refreshProfileList ();
|
||||
|
||||
public:
|
||||
|
||||
ProfilePanel ();
|
||||
ProfilePanel (bool readOnly=false);
|
||||
virtual ~ProfilePanel ();
|
||||
|
||||
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);
|
||||
|
||||
// PParamsChangeListener interface
|
||||
void procParamsChanged (rtengine::procparams::ProcParams* params, rtengine::ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited=NULL);
|
||||
|
||||
// gui callbacks
|
||||
void save_clicked ();
|
||||
void load_clicked ();
|
||||
void copy_clicked ();
|
||||
void paste_clicked ();
|
||||
void save_clicked (GdkEventButton* event);
|
||||
void load_clicked (GdkEventButton* event);
|
||||
void copy_clicked (GdkEventButton* event);
|
||||
void paste_clicked (GdkEventButton* event);
|
||||
void selection_changed ();
|
||||
};
|
||||
|
||||
|
@ -28,12 +28,23 @@ using namespace rtengine::procparams;
|
||||
|
||||
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 () {
|
||||
|
||||
// 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;
|
||||
pparams.clear ();
|
||||
}
|
||||
partProfiles.clear ();
|
||||
|
||||
if (options.multiUser) {
|
||||
Glib::ustring userPD = options.rtdir + "/" + options.profilePath;
|
||||
@ -68,16 +79,21 @@ void ProfileStore::parseDir (const Glib::ustring& pdir) {
|
||||
if( options.rtSettings.verbose )
|
||||
printf ("Processing file %s...\n", fname.c_str());
|
||||
Glib::ustring name = sname.substr(0,lastdot);
|
||||
if (pparams.find(name)!=pparams.end()) {
|
||||
delete pparams[name];
|
||||
pparams.erase (pparams.find(name));
|
||||
std::map<Glib::ustring,PartialProfile*>::iterator j = partProfiles.find(name);
|
||||
if (j!=partProfiles.end()) {
|
||||
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> 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);
|
||||
return ret;
|
||||
}
|
||||
|
||||
rtengine::procparams::ProcParams* ProfileStore::getDefaultProcParams (bool isRaw) {
|
||||
ProcParams* ProfileStore::getDefaultProcParams (bool isRaw) {
|
||||
|
||||
rtengine::procparams::ProcParams* pp = getProfile (isRaw ? options.defProfRaw : options.defProfImg);
|
||||
if (!pp) {
|
||||
pp = new ProcParams ();
|
||||
pparams[isRaw ? options.defProfRaw : options.defProfImg] = pp;
|
||||
}
|
||||
return pp;
|
||||
PartialProfile* pProf = getProfile (isRaw ? options.defProfRaw : options.defProfImg);
|
||||
if (!pProf) {
|
||||
Glib::ustring profName = isRaw ? options.defProfRaw : options.defProfImg;
|
||||
pProf = new PartialProfile (true);
|
||||
partProfiles[profName] = pProf;
|
||||
}
|
||||
return pProf->pparams;
|
||||
}
|
||||
|
||||
|
@ -22,19 +22,21 @@
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include "../rtengine/rtengine.h"
|
||||
#include "paramsedited.h"
|
||||
#include <glibmm.h>
|
||||
|
||||
class ProfileStore {
|
||||
|
||||
std::map<Glib::ustring,rtengine::procparams::ProcParams*> pparams;
|
||||
std::map<Glib::ustring, rtengine::procparams::PartialProfile*> partProfiles;
|
||||
void parseDir (const Glib::ustring& pdir);
|
||||
|
||||
public:
|
||||
|
||||
|
||||
~ProfileStore();
|
||||
void parseProfiles ();
|
||||
rtengine::procparams::ProcParams* getProfile (const Glib::ustring& profname);
|
||||
std::vector<Glib::ustring> getProfileNames ();
|
||||
rtengine::procparams::ProcParams* getDefaultProcParams (bool isRaw);
|
||||
rtengine::procparams::PartialProfile* getProfile (const Glib::ustring& profname);
|
||||
std::vector<Glib::ustring> getProfileNames ();
|
||||
rtengine::procparams::ProcParams* getDefaultProcParams (bool isRaw);
|
||||
};
|
||||
|
||||
extern ProfileStore profileStore;
|
||||
|
@ -34,6 +34,7 @@ RTWindow::RTWindow ()
|
||||
|
||||
cacheMgr->init ();
|
||||
WhiteBalance::init();
|
||||
ProfilePanel::init();
|
||||
|
||||
Glib::ustring fName = "rt-logo.png";
|
||||
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
|
||||
WhiteBalance::cleanup();
|
||||
ProfilePanel::cleanup();
|
||||
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
// 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) {
|
||||
// try to load the last saved parameters from the cache or from the paramfile file
|
||||
ProcParams* ldprof = NULL;
|
||||
@ -195,7 +198,7 @@ rtengine::procparams::ProcParams* Thumbnail::createProcParamsForUpdate(bool retu
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@ -212,6 +215,14 @@ void Thumbnail::notifylisterners_procParamsChanged(int 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 () {
|
||||
// TODO: Check for Linux
|
||||
#ifdef WIN32
|
||||
@ -219,17 +230,22 @@ void Thumbnail::loadProcParams () {
|
||||
#endif
|
||||
|
||||
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) {
|
||||
// try to load it from params file next to the image file
|
||||
int ppres = pparams.load (fname + paramFileExtension);
|
||||
pparamsValid = !ppres && pparams.ppVersion>=220;
|
||||
// if no success, try to load the cached version of the procparams
|
||||
if (!pparamsValid)
|
||||
pparamsValid = !pparams.load (getCacheFileName ("profiles")+paramFileExtension);
|
||||
pparamsValid = !pparams.load (getCacheFileName ("profiles")+paramFileExtension);
|
||||
}
|
||||
else {
|
||||
// try to load it from cache
|
||||
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) {
|
||||
int ppres = pparams.load (fname + paramFileExtension);
|
||||
pparamsValid = !ppres && pparams.ppVersion>=220;
|
||||
@ -304,7 +320,7 @@ bool Thumbnail::hasProcParams () {
|
||||
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
|
||||
#ifdef WIN32
|
||||
Glib::Mutex::Lock lock(mutex);
|
||||
@ -318,7 +334,13 @@ void Thumbnail::setProcParams (const ProcParams& pp, int whoChangedIt, bool upda
|
||||
int colorlabel = getColorLabel();
|
||||
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;
|
||||
needsReProcessing = true;
|
||||
|
||||
|
@ -86,7 +86,7 @@ class Thumbnail {
|
||||
// Use this to create params on demand for update
|
||||
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 loadProcParams ();
|
||||
|
||||
|
@ -85,7 +85,7 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) {
|
||||
addPanel (detailsPanel, sharpenEdge, M("TP_SHARPENEDGE_LABEL")); toolPanels.push_back (sharpenEdge);
|
||||
addPanel (detailsPanel, sharpenMicro, M("TP_SHARPENMICRO_LABEL")); toolPanels.push_back (sharpenMicro);
|
||||
addPanel (colorPanel, hsvequalizer, M("TP_HSVEQUALIZER_LABEL")); toolPanels.push_back (hsvequalizer);
|
||||
addPanel (colorPanel, rgbcurves, M("TP_RGBCURVES_LABEL")); toolPanels.push_back (rgbcurves);
|
||||
addPanel (colorPanel, rgbcurves, M("TP_RGBCURVES_LABEL")); toolPanels.push_back (rgbcurves);
|
||||
addPanel (exposurePanel, edgePreservingDecompositionUI, M("TP_EPD_LABEL")); toolPanels.push_back (edgePreservingDecompositionUI);
|
||||
addPanel (exposurePanel, lcurve, M("TP_LABCURVE_LABEL")); toolPanels.push_back (lcurve);
|
||||
addPanel (detailsPanel, impulsedenoise, M("TP_IMPULSEDENOISE_LABEL")); toolPanels.push_back (impulsedenoise);
|
||||
@ -263,26 +263,40 @@ void ToolPanelCoordinator::panelChanged (rtengine::ProcEvent event, const Glib::
|
||||
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;
|
||||
|
||||
if (!ipc) return;
|
||||
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
|
||||
bool filterRawRefresh=false;
|
||||
if (event!=rtengine::EvPhotoLoaded) {
|
||||
ParamsEdited pe;
|
||||
std::vector<rtengine::procparams::ProcParams> lParams(2);
|
||||
lParams[0]=*params; lParams[1]=*nparams;
|
||||
lParams[0]=*params; lParams[1]=*mergedParams;
|
||||
pe.set(true);
|
||||
pe.initFrom (lParams);
|
||||
|
||||
filterRawRefresh=pe.raw.isUnchanged();
|
||||
}
|
||||
|
||||
*params = *nparams;
|
||||
*params = *mergedParams;
|
||||
delete mergedParams;
|
||||
|
||||
tr = TR_NONE;
|
||||
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);
|
||||
|
||||
// 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);
|
||||
|
||||
// to support the GUI:
|
||||
|
Loading…
x
Reference in New Issue
Block a user