1 /*
2 * This file is part of RawTherapee.
3 *
4 * Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
5 *
6 * RawTherapee is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * RawTherapee is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
18 */
19 #include "partialpastedlg.h"
20 #include "multilangmgr.h"
21 #include "paramsedited.h"
22 #include "guiutils.h"
23
PartialPasteDlg(const Glib::ustring & title,Gtk::Window * parent)24 PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* parent)
25 : Gtk::Dialog (title, *parent, true)
26 {
27 set_default_size(700, 600);
28
29 everything = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EVERYTHING")));
30 everything ->set_name("PartialPasteHeader");
31
32 basic = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_BASICGROUP")));
33 basic ->set_name("PartialPasteHeader");
34 detail = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DETAILGROUP")));
35 detail ->set_name("PartialPasteHeader");
36 color = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COLORGROUP")));
37 color ->set_name("PartialPasteHeader");
38 lens = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LENSGROUP")));
39 lens ->set_name("PartialPasteHeader");
40 composition = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COMPOSITIONGROUP")));
41 composition ->set_name("PartialPasteHeader");
42 meta = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_METAGROUP")));
43 meta ->set_name("PartialPasteHeader");
44 raw = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWGROUP")));
45 raw ->set_name("PartialPasteHeader");
46 advanced = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ADVANCEDGROUP")));
47 advanced ->set_name("PartialPasteHeader");
48
49 // Basic Settings:
50 wb = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_WHITEBALANCE")));
51 exposure = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXPOSURE")));
52 sh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHADOWSHIGHLIGHTS")));
53 epd = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EPD")));
54 fattal = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_TM_FATTAL")));
55 pcvignette = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PCVIGNETTE")));
56 gradient = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_GRADIENT")));
57 labcurve = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LABCURVE")));
58
59 // Detail Settings:
60 sharpen = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENING")));
61 localcontrast = Gtk::manage(new Gtk::CheckButton(M("PARTIALPASTE_LOCALCONTRAST")));
62 sharpenedge = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENEDGE")));
63 sharpenmicro = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENMICRO")));
64 impden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IMPULSEDENOISE")));
65 dirpyrden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYRDENOISE")));
66 defringe = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DEFRINGE")));
67 dirpyreq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYREQUALIZER")));
68 dehaze = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DEHAZE")) );
69
70 // Advanced Settings:
71 retinex = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RETINEX")));
72 colorappearance = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COLORAPP")));
73 wavelet = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EQUALIZER")));
74
75 // Color-Related Settings
76 icm = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ICMSETTINGS")));
77 vibrance = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_VIBRANCE")));
78 chmixer = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_CHANNELMIXER")));
79 blackwhite = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_CHANNELMIXERBW")));
80 hsveq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_HSVEQUALIZER")));
81 filmSimulation = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FILMSIMULATION")) );
82 softlight = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SOFTLIGHT")) );
83 rgbcurves = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RGBCURVES")));
84 colortoning = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COLORTONING")));
85
86 // Lens-Related Settings
87 distortion = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DISTORTION")));
88 cacorr = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_CACORRECTION")));
89 vignetting = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_VIGNETTING")));
90 lcp = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LENSPROFILE")));
91
92 // Composition Settings:
93 coarserot = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COARSETRANS")));
94 finerot = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ROTATION")));
95 crop = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_CROP")));
96 resize = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RESIZE")));
97 prsharpening = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PRSHARPENING")));
98 perspective = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PERSPECTIVE")));
99 commonTrans = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COMMONTRANSFORMPARAMS")));
100
101 // Metadata:
102 metadata = Gtk::manage(new Gtk::CheckButton(M("PARTIALPASTE_METADATA")));
103 exifch = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXIFCHANGES")));
104 iptc = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IPTCINFO")));
105
106 // Raw Settings:
107 raw_method = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAW_DMETHOD")));
108 raw_imagenum = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAW_IMAGENUM")));
109 raw_border = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAW_BORDER")));
110 raw_pixelshift = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAW_PIXELSHIFT")));
111 raw_ccSteps = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAW_FALSECOLOR")));
112 raw_dcb_iterations = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAW_DCBITERATIONS")));
113 raw_dcb_enhance = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAW_DCBENHANCE")));
114 raw_lmmse_iterations = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAW_LMMSEITERATIONS")));
115 //---
116 raw_linenoise = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_LINEDENOISE")));
117 raw_greenthresh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_GREENEQUIL")));
118 raw_hotpix_filt = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_HOTPIXFILT")));
119 raw_deadpix_filt = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_DEADPIXFILT")));
120 raw_pdaf_lines_filter = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_PDAFLINESFILTER")));
121 //---
122 raw_expos = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_LINEAR")));
123 raw_black = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_BLACK")));
124 //---
125 df_file = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DARKFRAMEFILE")));
126 df_AutoSelect = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DARKFRAMEAUTOSELECT")));
127 //---
128 ff_file = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FLATFIELDFILE")));
129 ff_AutoSelect = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FLATFIELDAUTOSELECT")));
130 ff_BlurType = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FLATFIELDBLURTYPE")));
131 ff_BlurRadius = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FLATFIELDBLURRADIUS")));
132 ff_ClipControl = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FLATFIELDCLIPCONTROL")));
133 //---
134 raw_ca_autocorrect = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWCACORR_AUTO")));
135 raw_caredblue = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWCACORR_CAREDBLUE")));
136 raw_ca_avoid_colourshift = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT")));
137 //---
138 filmNegative = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FILMNEGATIVE")) );
139 //---
140 captureSharpening = Gtk::manage (new Gtk::CheckButton (M("TP_PDSHARPENING_LABEL")) );
141
142 Gtk::VBox* vboxes[8];
143 Gtk::HSeparator* hseps[8];
144
145 for (int i = 0; i < 8; i++) {
146 vboxes[i] = Gtk::manage (new Gtk::VBox ());
147 vboxes[i]->set_name("PartialPasteGroupContainer");
148 hseps[i] = Gtk::manage (new Gtk::HSeparator ());
149 hseps[i]->set_name("PartialPasteHeaderSep");
150 }
151
152 //BASIC
153 vboxes[0]->pack_start (*basic, Gtk::PACK_SHRINK, 2);
154 vboxes[0]->pack_start (*hseps[0], Gtk::PACK_SHRINK, 2);
155 vboxes[0]->pack_start (*wb, Gtk::PACK_SHRINK, 2);
156 vboxes[0]->pack_start (*exposure, Gtk::PACK_SHRINK, 2);
157 vboxes[0]->pack_start (*sh, Gtk::PACK_SHRINK, 2);
158 vboxes[0]->pack_start (*epd, Gtk::PACK_SHRINK, 2);
159 vboxes[0]->pack_start (*fattal, Gtk::PACK_SHRINK, 2);
160 vboxes[0]->pack_start (*pcvignette, Gtk::PACK_SHRINK, 2);
161 vboxes[0]->pack_start (*gradient, Gtk::PACK_SHRINK, 2);
162 vboxes[0]->pack_start (*labcurve, Gtk::PACK_SHRINK, 2);
163
164 //DETAIL
165 vboxes[1]->pack_start (*detail, Gtk::PACK_SHRINK, 2);
166 vboxes[1]->pack_start (*hseps[1], Gtk::PACK_SHRINK, 2);
167 vboxes[1]->pack_start (*sharpen, Gtk::PACK_SHRINK, 2);
168 vboxes[1]->pack_start (*localcontrast, Gtk::PACK_SHRINK, 2);
169 vboxes[1]->pack_start (*sharpenedge, Gtk::PACK_SHRINK, 2);
170 vboxes[1]->pack_start (*sharpenmicro, Gtk::PACK_SHRINK, 2);
171 vboxes[1]->pack_start (*impden, Gtk::PACK_SHRINK, 2);
172 vboxes[1]->pack_start (*dirpyrden, Gtk::PACK_SHRINK, 2);
173 vboxes[1]->pack_start (*defringe, Gtk::PACK_SHRINK, 2);
174 vboxes[1]->pack_start (*dirpyreq, Gtk::PACK_SHRINK, 2);
175 vboxes[1]->pack_start (*dehaze, Gtk::PACK_SHRINK, 2);
176
177 //COLOR
178 vboxes[2]->pack_start (*color, Gtk::PACK_SHRINK, 2);
179 vboxes[2]->pack_start (*hseps[2], Gtk::PACK_SHRINK, 2);
180 vboxes[2]->pack_start (*icm, Gtk::PACK_SHRINK, 2);
181 vboxes[2]->pack_start (*vibrance, Gtk::PACK_SHRINK, 2);
182 vboxes[2]->pack_start (*chmixer, Gtk::PACK_SHRINK, 2);
183 vboxes[2]->pack_start (*blackwhite, Gtk::PACK_SHRINK, 2);
184 vboxes[2]->pack_start (*hsveq, Gtk::PACK_SHRINK, 2);
185 vboxes[2]->pack_start (*filmSimulation, Gtk::PACK_SHRINK, 2);
186 vboxes[2]->pack_start (*softlight, Gtk::PACK_SHRINK, 2);
187 vboxes[2]->pack_start (*rgbcurves, Gtk::PACK_SHRINK, 2);
188 vboxes[2]->pack_start (*colortoning, Gtk::PACK_SHRINK, 2);
189
190 //LENS
191 vboxes[3]->pack_start (*lens, Gtk::PACK_SHRINK, 2);
192 vboxes[3]->pack_start (*hseps[3], Gtk::PACK_SHRINK, 2);
193 vboxes[3]->pack_start (*distortion, Gtk::PACK_SHRINK, 2);
194 vboxes[3]->pack_start (*cacorr, Gtk::PACK_SHRINK, 2);
195 vboxes[3]->pack_start (*vignetting, Gtk::PACK_SHRINK, 2);
196 vboxes[3]->pack_start (*lcp, Gtk::PACK_SHRINK, 2);
197
198 //COMPOSITION
199 vboxes[4]->pack_start (*composition, Gtk::PACK_SHRINK, 2);
200 vboxes[4]->pack_start (*hseps[4], Gtk::PACK_SHRINK, 2);
201 vboxes[4]->pack_start (*coarserot, Gtk::PACK_SHRINK, 2);
202 vboxes[4]->pack_start (*finerot, Gtk::PACK_SHRINK, 2);
203 vboxes[4]->pack_start (*crop, Gtk::PACK_SHRINK, 2);
204 vboxes[4]->pack_start (*resize, Gtk::PACK_SHRINK, 2);
205 vboxes[4]->pack_start (*prsharpening, Gtk::PACK_SHRINK, 2);
206 vboxes[4]->pack_start (*perspective, Gtk::PACK_SHRINK, 2);
207 vboxes[4]->pack_start (*commonTrans, Gtk::PACK_SHRINK, 2);
208
209 //ADVANCED
210 vboxes[5]->pack_start (*advanced, Gtk::PACK_SHRINK, 2);
211 vboxes[5]->pack_start (*hseps[5], Gtk::PACK_SHRINK, 2);
212 vboxes[5]->pack_start (*retinex, Gtk::PACK_SHRINK, 2);
213 vboxes[5]->pack_start (*colorappearance, Gtk::PACK_SHRINK, 2);
214 vboxes[5]->pack_start (*wavelet, Gtk::PACK_SHRINK, 2);
215
216 //META
217 vboxes[6]->pack_start (*meta, Gtk::PACK_SHRINK, 2);
218 vboxes[6]->pack_start (*hseps[6], Gtk::PACK_SHRINK, 2);
219 vboxes[6]->pack_start(*metadata, Gtk::PACK_SHRINK, 2);
220 vboxes[6]->pack_start (*exifch, Gtk::PACK_SHRINK, 2);
221 vboxes[6]->pack_start (*iptc, Gtk::PACK_SHRINK, 2);
222
223 //RAW
224 vboxes[7]->pack_start (*raw, Gtk::PACK_SHRINK, 2);
225 vboxes[7]->pack_start (*hseps[7], Gtk::PACK_SHRINK, 2);
226 vboxes[7]->pack_start (*raw_method, Gtk::PACK_SHRINK, 2);
227 vboxes[7]->pack_start (*raw_border, Gtk::PACK_SHRINK, 2);
228 vboxes[7]->pack_start (*raw_imagenum, Gtk::PACK_SHRINK, 2);
229 vboxes[7]->pack_start (*raw_pixelshift, Gtk::PACK_SHRINK, 2);
230 vboxes[7]->pack_start (*raw_ccSteps, Gtk::PACK_SHRINK, 2);
231 vboxes[7]->pack_start (*raw_dcb_iterations, Gtk::PACK_SHRINK, 2);
232 vboxes[7]->pack_start (*raw_dcb_enhance, Gtk::PACK_SHRINK, 2);
233 vboxes[7]->pack_start (*raw_lmmse_iterations, Gtk::PACK_SHRINK, 2);
234 vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0);
235 vboxes[7]->pack_start (*raw_linenoise, Gtk::PACK_SHRINK, 2);
236 vboxes[7]->pack_start (*raw_greenthresh, Gtk::PACK_SHRINK, 2);
237 vboxes[7]->pack_start (*raw_hotpix_filt, Gtk::PACK_SHRINK, 2);
238 vboxes[7]->pack_start (*raw_deadpix_filt, Gtk::PACK_SHRINK, 2);
239 vboxes[7]->pack_start (*raw_pdaf_lines_filter, Gtk::PACK_SHRINK, 2);
240 vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0);
241 vboxes[7]->pack_start (*raw_expos, Gtk::PACK_SHRINK, 2);
242 vboxes[7]->pack_start (*raw_black, Gtk::PACK_SHRINK, 2);
243 vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0);
244 vboxes[7]->pack_start (*df_file, Gtk::PACK_SHRINK, 2);
245 vboxes[7]->pack_start (*df_AutoSelect, Gtk::PACK_SHRINK, 2);
246 vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0);
247 vboxes[7]->pack_start (*ff_file, Gtk::PACK_SHRINK, 2);
248 vboxes[7]->pack_start (*ff_AutoSelect, Gtk::PACK_SHRINK, 2);
249 vboxes[7]->pack_start (*ff_BlurType, Gtk::PACK_SHRINK, 2);
250 vboxes[7]->pack_start (*ff_BlurRadius, Gtk::PACK_SHRINK, 2);
251 vboxes[7]->pack_start (*ff_ClipControl, Gtk::PACK_SHRINK, 2);
252 vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0);
253 vboxes[7]->pack_start (*raw_ca_autocorrect, Gtk::PACK_SHRINK, 2);
254 vboxes[7]->pack_start (*raw_caredblue, Gtk::PACK_SHRINK, 2);
255 vboxes[7]->pack_start (*raw_ca_avoid_colourshift, Gtk::PACK_SHRINK, 2);
256 vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0);
257 vboxes[7]->pack_start (*filmNegative, Gtk::PACK_SHRINK, 2);
258 vboxes[7]->pack_start (*captureSharpening, Gtk::PACK_SHRINK, 2);
259
260 Gtk::VBox* vbCol1 = Gtk::manage (new Gtk::VBox ());
261 Gtk::VBox* vbCol2 = Gtk::manage (new Gtk::VBox ());
262 Gtk::VBox* vbCol3 = Gtk::manage (new Gtk::VBox ());
263
264 for (int i = 0; i < 3; i++) {
265 vbCol1->pack_start (*vboxes[i], Gtk::PACK_SHRINK, 2);
266 }
267
268 for (int i = 3; i < 7; i++) {
269 vbCol2->pack_start (*vboxes[i], Gtk::PACK_SHRINK, 2);
270 }
271
272 for (int i = 7; i < 8; i++) {
273 vbCol3->pack_start (*vboxes[i], Gtk::PACK_SHRINK, 2);
274 }
275
276 Gtk::VBox* vbtop = Gtk::manage (new Gtk::VBox ());
277 vbtop->pack_start (*everything, Gtk::PACK_SHRINK, 2);
278
279 Gtk::Dialog::get_content_area()->pack_start (*vbtop, Gtk::PACK_SHRINK, 2);
280
281 Gtk::HBox* hbmain = Gtk::manage (new Gtk::HBox ());
282 hbmain->pack_start (*vbCol1);
283 Gtk::VSeparator *vsep1 = Gtk::manage (new Gtk::VSeparator ());
284 setExpandAlignProperties(vsep1, false, true, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL);
285 hbmain->pack_start (*vsep1);
286 hbmain->pack_start (*vbCol2);
287 Gtk::VSeparator *vsep2 = Gtk::manage (new Gtk::VSeparator ());
288 setExpandAlignProperties(vsep2, false, true, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL);
289 hbmain->pack_start (*vsep2);
290 hbmain->pack_start (*vbCol3);
291
292 scrolledwindow = Gtk::manage ( new Gtk::ScrolledWindow() );
293 scrolledwindow->set_name("PartialPaste");
294 scrolledwindow->set_can_focus(true);
295 scrolledwindow->set_shadow_type(Gtk::SHADOW_NONE);
296 scrolledwindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
297 scrolledwindow->property_window_placement().set_value(Gtk::CORNER_TOP_LEFT);
298
299 scrolledwindow->add(*hbmain);
300
301 Gtk::Dialog::get_content_area()->pack_start (*scrolledwindow, Gtk::PACK_EXPAND_WIDGET, 2);
302
303 hbmain->show();
304 scrolledwindow->show ();
305
306 // This can be improved
307 // there is currently no binding of subsettings to CheckButton 'everything' for its inconsistent status
308 everythingConn = everything->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::everythingToggled));
309 basicConn = basic->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::basicToggled));
310 detailConn = detail->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::detailToggled));
311 colorConn = color->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::colorToggled));
312 lensConn = lens->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::lensToggled));
313 compositionConn = composition->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::compositionToggled));
314 metaConn = meta->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::metaToggled));
315 rawConn = raw->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::rawToggled));
316 advancedConn = advanced->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::advancedToggled));
317
318 // Basic Settings
319 wbConn = wb->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
320 exposureConn = exposure->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
321 shConn = sh->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
322 epdConn = epd->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
323 fattalConn = fattal->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
324 pcvignetteConn = pcvignette->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
325 gradientConn = gradient->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
326 labcurveConn = labcurve->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
327
328 // Detail Settings:
329 sharpenConn = sharpen->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
330 localcontrastConn = localcontrast->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
331 gradsharpenConn = sharpenedge->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
332 microcontrastConn = sharpenmicro->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
333 impdenConn = impden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
334 dirpyrdenConn = dirpyrden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
335 defringeConn = defringe->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
336 dirpyreqConn = dirpyreq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
337 dehazeConn = dehaze->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
338
339 // Advanced Settings:
340 retinexConn = retinex->signal_toggled().connect (sigc::bind (sigc::mem_fun(*advanced, &Gtk::CheckButton::set_inconsistent), true));
341 colorappearanceConn = colorappearance->signal_toggled().connect (sigc::bind (sigc::mem_fun(*advanced, &Gtk::CheckButton::set_inconsistent), true));
342 waveletConn = wavelet->signal_toggled().connect (sigc::bind (sigc::mem_fun(*advanced, &Gtk::CheckButton::set_inconsistent), true));
343
344 // Color-related Settings:
345 icmConn = icm->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
346 vibranceConn = vibrance->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
347 chmixerConn = chmixer->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
348 chmixerbwConn = blackwhite->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
349 hsveqConn = hsveq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
350 filmSimulationConn = filmSimulation->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
351 softlightConn = softlight->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
352 rgbcurvesConn = rgbcurves->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
353 colortoningConn = colortoning->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
354
355 // Lens-Related Settings:
356 distortionConn = distortion->signal_toggled().connect (sigc::bind (sigc::mem_fun(*lens, &Gtk::CheckButton::set_inconsistent), true));
357 cacorrConn = cacorr->signal_toggled().connect (sigc::bind (sigc::mem_fun(*lens, &Gtk::CheckButton::set_inconsistent), true));
358 vignettingConn = vignetting->signal_toggled().connect (sigc::bind (sigc::mem_fun(*lens, &Gtk::CheckButton::set_inconsistent), true));
359 lcpConn = lcp->signal_toggled().connect (sigc::bind (sigc::mem_fun(*lens, &Gtk::CheckButton::set_inconsistent), true));
360
361 // Composition Settings:
362 coarserotConn = coarserot->signal_toggled().connect (sigc::bind (sigc::mem_fun(*composition, &Gtk::CheckButton::set_inconsistent), true));
363 finerotConn = finerot->signal_toggled().connect (sigc::bind (sigc::mem_fun(*composition, &Gtk::CheckButton::set_inconsistent), true));
364 cropConn = crop->signal_toggled().connect (sigc::bind (sigc::mem_fun(*composition, &Gtk::CheckButton::set_inconsistent), true));
365 resizeConn = resize->signal_toggled().connect (sigc::bind (sigc::mem_fun(*composition, &Gtk::CheckButton::set_inconsistent), true));
366 prsharpeningConn = prsharpening->signal_toggled().connect (sigc::bind (sigc::mem_fun(*composition, &Gtk::CheckButton::set_inconsistent), true));
367 perspectiveConn = perspective->signal_toggled().connect (sigc::bind (sigc::mem_fun(*composition, &Gtk::CheckButton::set_inconsistent), true));
368 commonTransConn = commonTrans->signal_toggled().connect (sigc::bind (sigc::mem_fun(*composition, &Gtk::CheckButton::set_inconsistent), true));
369
370 // Metadata:
371 metadataConn = metadata->signal_toggled().connect(sigc::bind (sigc::mem_fun(*meta, &Gtk::CheckButton::set_inconsistent), true));
372 exifchConn = exifch->signal_toggled().connect (sigc::bind (sigc::mem_fun(*meta, &Gtk::CheckButton::set_inconsistent), true));
373 iptcConn = iptc->signal_toggled().connect (sigc::bind (sigc::mem_fun(*meta, &Gtk::CheckButton::set_inconsistent), true));
374
375 // Raw Settings:
376 raw_methodConn = raw_method->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
377 raw_borderConn = raw_border->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
378 raw_imagenumConn = raw_imagenum->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
379 raw_pixelshiftConn = raw_pixelshift->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
380 raw_ccStepsConn = raw_ccSteps->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
381 raw_dcb_iterationsConn = raw_dcb_iterations->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
382 raw_dcb_enhanceConn = raw_dcb_enhance->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
383 raw_lmmse_iterationsConn = raw_lmmse_iterations->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
384 //---
385 raw_linenoiseConn = raw_linenoise->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
386 raw_greenthreshConn = raw_greenthresh->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
387 raw_hotpix_filtConn = raw_hotpix_filt->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
388 raw_deadpix_filtConn = raw_deadpix_filt->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
389 raw_pdaf_lines_filterConn = raw_pdaf_lines_filter->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
390 //---
391 raw_exposConn = raw_expos->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
392 raw_blackConn = raw_black->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
393 //---
394 df_fileConn = df_file->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
395 df_AutoSelectConn = df_AutoSelect->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
396 //---
397 ff_fileConn = ff_file->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
398 ff_AutoSelectConn = ff_AutoSelect->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
399 ff_BlurTypeConn = ff_BlurType->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
400 ff_BlurRadiusConn = ff_BlurRadius->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
401 ff_ClipControlConn = ff_ClipControl->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
402 //---
403 raw_ca_autocorrectConn = raw_ca_autocorrect->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
404 raw_caredblueConn = raw_caredblue->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
405 raw_ca_avoid_colourshiftconn = raw_ca_avoid_colourshift->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
406 //---
407 filmNegativeConn = filmNegative->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
408 //---
409 captureSharpeningConn = captureSharpening->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
410
411 add_button (M("GENERAL_OK"), Gtk::RESPONSE_OK);
412 add_button (M("GENERAL_CANCEL"), Gtk::RESPONSE_CANCEL);
413 set_response_sensitive (Gtk::RESPONSE_OK);
414 set_default_response (Gtk::RESPONSE_OK);
415 show_all_children ();
416 }
417
everythingToggled()418 void PartialPasteDlg::everythingToggled ()
419 {
420
421 ConnectionBlocker basicBlocker(basicConn);
422 ConnectionBlocker detailBlocker(detailConn);
423 ConnectionBlocker colorBlocker(colorConn);
424 ConnectionBlocker lensBlocker(lensConn);
425 ConnectionBlocker compositionBlocker(compositionConn);
426 ConnectionBlocker metaBlocker(metaConn);
427 ConnectionBlocker rawBlocker(rawConn);
428 ConnectionBlocker advancedBlocker(advancedConn);
429
430 everything->set_inconsistent (false);
431
432 //toggle group headings
433 basic->set_active(everything->get_active());
434 detail->set_active(everything->get_active());
435 color->set_active(everything->get_active());
436 lens->set_active(everything->get_active());
437 composition->set_active(everything->get_active());
438 meta->set_active(everything->get_active());
439 raw->set_active(everything->get_active());
440 advanced->set_active(everything->get_active());
441
442 //toggle group children
443 PartialPasteDlg::basicToggled ();
444 PartialPasteDlg::detailToggled ();
445 PartialPasteDlg::colorToggled ();
446 PartialPasteDlg::lensToggled ();
447 PartialPasteDlg::compositionToggled ();
448 PartialPasteDlg::metaToggled ();
449 PartialPasteDlg::rawToggled ();
450 PartialPasteDlg::advancedToggled ();
451 }
452
rawToggled()453 void PartialPasteDlg::rawToggled ()
454 {
455
456 ConnectionBlocker raw_methodBlocker(raw_methodConn);
457 ConnectionBlocker raw_borderBlocker(raw_borderConn);
458 ConnectionBlocker raw_imagenumBlocker(raw_imagenumConn);
459 ConnectionBlocker raw_pixelshiftBlocker(raw_pixelshiftConn);
460 ConnectionBlocker raw_ccStepsBlocker(raw_ccStepsConn);
461 ConnectionBlocker raw_dcb_iterationsBlocker(raw_dcb_iterationsConn);
462 ConnectionBlocker raw_dcb_enhanceBlocker(raw_dcb_enhanceConn);
463 ConnectionBlocker raw_lmmse_iterationsBlocker(raw_lmmse_iterationsConn);
464 ConnectionBlocker raw_linenoiseBlocker(raw_linenoiseConn);
465 ConnectionBlocker raw_greenthreshBlocker(raw_greenthreshConn);
466 ConnectionBlocker raw_hotpix_filtBlocker(raw_hotpix_filtConn);
467 ConnectionBlocker raw_deadpix_filtBlocker(raw_deadpix_filtConn);
468 ConnectionBlocker raw_pdaf_lines_filterBlocker(raw_pdaf_lines_filterConn);
469 ConnectionBlocker raw_exposBlocker(raw_exposConn);
470 ConnectionBlocker raw_blackBlocker(raw_blackConn);
471 ConnectionBlocker df_fileBlocker(df_fileConn);
472 ConnectionBlocker df_AutoSelectBlocker(df_AutoSelectConn);
473 ConnectionBlocker ff_fileBlocker(ff_fileConn);
474 ConnectionBlocker ff_AutoSelectBlocker(ff_AutoSelectConn);
475 ConnectionBlocker ff_BlurTypeBlocker(ff_BlurTypeConn);
476 ConnectionBlocker ff_BlurRadiusBlocker(ff_BlurRadiusConn);
477 ConnectionBlocker ff_ClipControlBlocker(ff_ClipControlConn);
478 ConnectionBlocker raw_ca_autocorrectBlocker(raw_ca_autocorrectConn);
479 ConnectionBlocker raw_caredblueBlocker(raw_caredblueConn);
480 ConnectionBlocker raw_ca_avoid_colourshiftBlocker(raw_ca_avoid_colourshiftconn);
481 ConnectionBlocker filmNegativeBlocker(filmNegativeConn);
482 ConnectionBlocker captureSharpeningBlocker(captureSharpeningConn);
483
484 raw->set_inconsistent (false);
485
486 raw_method->set_active (raw->get_active ());
487 raw_border->set_active (raw->get_active ());
488 raw_imagenum->set_active (raw->get_active ());
489 raw_pixelshift->set_active (raw->get_active ());
490 raw_ccSteps->set_active (raw->get_active ());
491 raw_dcb_iterations->set_active (raw->get_active ());
492 raw_dcb_enhance->set_active (raw->get_active ());
493 raw_lmmse_iterations->set_active (raw->get_active ());
494 raw_linenoise->set_active (raw->get_active ());
495 raw_greenthresh->set_active (raw->get_active ());
496 raw_hotpix_filt->set_active (raw->get_active ());
497 raw_deadpix_filt->set_active (raw->get_active ());
498 raw_pdaf_lines_filter->set_active (raw->get_active ());
499 raw_expos->set_active (raw->get_active ());
500 raw_black->set_active (raw->get_active ());
501 df_file->set_active (raw->get_active ());
502 df_AutoSelect->set_active (raw->get_active ());
503 ff_file->set_active (raw->get_active ());
504 ff_AutoSelect->set_active (raw->get_active ());
505 ff_BlurType->set_active (raw->get_active ());
506 ff_BlurRadius->set_active (raw->get_active ());
507 ff_ClipControl->set_active (raw->get_active ());
508 raw_ca_autocorrect->set_active (raw->get_active ());
509 raw_caredblue->set_active (raw->get_active ());
510 raw_ca_avoid_colourshift->set_active (raw->get_active ());
511 filmNegative->set_active (raw->get_active());
512 captureSharpening->set_active (raw->get_active());
513 }
514
basicToggled()515 void PartialPasteDlg::basicToggled ()
516 {
517
518 ConnectionBlocker wbBlocker(wbConn);
519 ConnectionBlocker exposureBlocker(exposureConn);
520 ConnectionBlocker shBlocker(shConn);
521 ConnectionBlocker epdBlocker(epdConn);
522 ConnectionBlocker fattalBlocker(fattalConn);
523 ConnectionBlocker pcvignetteBlocker(pcvignetteConn);
524 ConnectionBlocker gradientBlocker(gradientConn);
525 ConnectionBlocker labcurveBlocker(labcurveConn);
526
527 basic->set_inconsistent (false);
528
529 wb->set_active (basic->get_active ());
530 exposure->set_active (basic->get_active ());
531 sh->set_active (basic->get_active ());
532 epd->set_active (basic->get_active ());
533 fattal->set_active (basic->get_active ());
534 pcvignette->set_active (basic->get_active ());
535 gradient->set_active (basic->get_active ());
536 labcurve->set_active (basic->get_active ());
537 }
538
detailToggled()539 void PartialPasteDlg::detailToggled ()
540 {
541
542 ConnectionBlocker sharpenBlocker(sharpenConn);
543 ConnectionBlocker localcontrastBlocker(localcontrastConn);
544 ConnectionBlocker gradsharpenBlocker(gradsharpenConn);
545 ConnectionBlocker microcontrastBlocker(microcontrastConn);
546 ConnectionBlocker impdenBlocker(impdenConn);
547 ConnectionBlocker dirpyrdenBlocker(dirpyrdenConn);
548 ConnectionBlocker defringeBlocker(defringeConn);
549 ConnectionBlocker dirpyreqBlocker(dirpyreqConn);
550 ConnectionBlocker dehazeBlocker(dehazeConn);
551
552 detail->set_inconsistent (false);
553
554 sharpen->set_active (detail->get_active ());
555 localcontrast->set_active(detail->get_active());
556 sharpenedge->set_active (detail->get_active ());
557 sharpenmicro->set_active (detail->get_active ());
558 impden->set_active (detail->get_active ());
559 dirpyrden->set_active (detail->get_active ());
560 defringe->set_active (detail->get_active ());
561 dirpyreq->set_active (detail->get_active ());
562 dehaze->set_active (detail->get_active ());
563 }
564
advancedToggled()565 void PartialPasteDlg::advancedToggled ()
566 {
567
568 ConnectionBlocker retinexBlocker(retinexConn);
569 ConnectionBlocker colorappearanceBlocker(colorappearanceConn);
570 ConnectionBlocker waveletBlocker(waveletConn);
571
572 advanced->set_inconsistent (false);
573
574 retinex->set_active (advanced->get_active ());
575 colorappearance->set_active (advanced->get_active ());
576 wavelet->set_active (advanced->get_active ());
577 }
578
colorToggled()579 void PartialPasteDlg::colorToggled ()
580 {
581
582 ConnectionBlocker icmBlocker(icmConn);
583 ConnectionBlocker vibranceBlocker(vibranceConn);
584 ConnectionBlocker chmixerBlocker(chmixerConn);
585 ConnectionBlocker chmixerbwBlocker(chmixerbwConn);
586 ConnectionBlocker hsveqBlocker(hsveqConn);
587 ConnectionBlocker filmSimulationBlocker(filmSimulationConn);
588 ConnectionBlocker softlightBlocker(softlightConn);
589 ConnectionBlocker rgbcurvesBlocker(rgbcurvesConn);
590 ConnectionBlocker colortoningBlocker(colortoningConn);
591
592 color->set_inconsistent (false);
593
594 icm->set_active (color->get_active ());
595 vibrance->set_active (color->get_active ());
596 chmixer->set_active (color->get_active ());
597 blackwhite->set_active (color->get_active ());
598 hsveq->set_active (color->get_active ());
599 filmSimulation->set_active (color->get_active ());
600 softlight->set_active (color->get_active ());
601 rgbcurves->set_active (color->get_active ());
602 colortoning->set_active(color->get_active ());
603 }
604
lensToggled()605 void PartialPasteDlg::lensToggled ()
606 {
607
608 ConnectionBlocker distortionBlocker(distortionConn);
609 ConnectionBlocker cacorrBlocker(cacorrConn);
610 ConnectionBlocker vignettingBlocker(vignettingConn);
611 ConnectionBlocker lcpBlocker(lcpConn);
612
613 lens->set_inconsistent (false);
614
615 distortion->set_active (lens->get_active ());
616 cacorr->set_active (lens->get_active ());
617 vignetting->set_active (lens->get_active ());
618 lcp->set_active (lens->get_active ());
619 }
620
compositionToggled()621 void PartialPasteDlg::compositionToggled ()
622 {
623
624 ConnectionBlocker coarserotBlocker(coarserotConn);
625 ConnectionBlocker finerotBlocker(finerotConn);
626 ConnectionBlocker cropBlocker(cropConn);
627 ConnectionBlocker resizeBlocker(resizeConn);
628 ConnectionBlocker prsharpeningBlocker(prsharpeningConn);
629 ConnectionBlocker perspectiveBlocker(perspectiveConn);
630 ConnectionBlocker commonTransBlocker(commonTransConn);
631
632 composition->set_inconsistent (false);
633
634 coarserot->set_active (composition->get_active ());
635 finerot->set_active (composition->get_active ());
636 crop->set_active (composition->get_active ());
637 resize->set_active (composition->get_active ());
638 prsharpening->set_active (composition->get_active ());
639 perspective->set_active (composition->get_active ());
640 commonTrans->set_active (composition->get_active ());
641 }
642
metaToggled()643 void PartialPasteDlg::metaToggled ()
644 {
645
646 ConnectionBlocker metadataBlocker(metadataConn);
647 ConnectionBlocker exifchBlocker(exifchConn);
648 ConnectionBlocker iptcBlocker(iptcConn);
649
650 meta->set_inconsistent (false);
651
652 metadata->set_active(meta->get_active());
653 exifch->set_active (meta->get_active ());
654 iptc->set_active (meta->get_active ());
655 }
656
657
658 /*
659 * Copies the selected items from the source ProcParams+ParamsEdited(optional)
660 * to the destination ProcParams.
661 */
applyPaste(rtengine::procparams::ProcParams * dstPP,ParamsEdited * dstPE,const rtengine::procparams::ProcParams * srcPP,const ParamsEdited * srcPE)662 void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, ParamsEdited* dstPE, const rtengine::procparams::ProcParams* srcPP, const ParamsEdited* srcPE)
663 {
664
665 ParamsEdited falsePE; // falsePE is a workaround to set a group of ParamsEdited to false
666 ParamsEdited filterPE(true); // Contains the initial information about the loaded values
667
668 if (srcPE) {
669 filterPE = *srcPE;
670 }
671
672 // the general section is always ignored, whichever operation we use the PartialPaste for
673 filterPE.general = falsePE.general;
674
675 // Now we filter out the filter depending on the checked items
676 if (!wb->get_active ()) {
677 filterPE.wb = falsePE.wb;
678 }
679
680 if (!exposure->get_active ()) {
681 filterPE.toneCurve = falsePE.toneCurve;
682 }
683
684 if (!localcontrast->get_active()) {
685 filterPE.localContrast = falsePE.localContrast;
686 }
687
688 if (!sh->get_active ()) {
689 filterPE.sh = falsePE.sh;
690 }
691
692 if (!epd->get_active ()) {
693 filterPE.epd = falsePE.epd;
694 }
695
696 if (!fattal->get_active ()) {
697 filterPE.fattal = falsePE.fattal;
698 }
699
700 if (!retinex->get_active ()) {
701 filterPE.retinex = falsePE.retinex;
702 }
703
704 if (!pcvignette->get_active ()) {
705 filterPE.pcvignette = falsePE.pcvignette;
706 }
707
708 if (!gradient->get_active ()) {
709 filterPE.gradient = falsePE.gradient;
710 }
711
712 if (!labcurve->get_active ()) {
713 filterPE.labCurve = falsePE.labCurve;
714 }
715
716 if (!colorappearance->get_active ()) {
717 filterPE.colorappearance = falsePE.colorappearance;
718 }
719
720 if (!sharpen->get_active ()) {
721 filterPE.sharpening = falsePE.sharpening;
722 }
723
724 if (!sharpenedge->get_active ()) {
725 filterPE.sharpenEdge = falsePE.sharpenEdge;
726 }
727
728 if (!sharpenmicro->get_active()) {
729 filterPE.sharpenMicro = falsePE.sharpenMicro;
730 }
731
732 if (!impden->get_active ()) {
733 filterPE.impulseDenoise = falsePE.impulseDenoise;
734 }
735
736 if (!dirpyreq->get_active ()) {
737 filterPE.dirpyrequalizer = falsePE.dirpyrequalizer;
738 }
739
740 if (!defringe->get_active ()) {
741 filterPE.defringe = falsePE.defringe;
742 }
743
744 if (!dirpyrden->get_active ()) {
745 filterPE.dirpyrDenoise = falsePE.dirpyrDenoise;
746 }
747
748 if (!wavelet->get_active ()) {
749 filterPE.wavelet = falsePE.wavelet;
750 }
751
752 if (!icm->get_active ()) {
753 filterPE.icm = falsePE.icm;
754 }
755
756 if (!vibrance->get_active ()) {
757 filterPE.vibrance = falsePE.vibrance;
758 }
759
760 if (!chmixer->get_active ()) {
761 filterPE.chmixer = falsePE.chmixer;
762 }
763
764 if (!blackwhite->get_active ()) {
765 filterPE.blackwhite = falsePE.blackwhite;
766 }
767
768 if (!hsveq->get_active ()) {
769 filterPE.hsvequalizer = falsePE.hsvequalizer;
770 }
771
772 if (!filmSimulation->get_active ()) {
773 filterPE.filmSimulation = falsePE.filmSimulation;
774 }
775
776 if (!softlight->get_active ()) {
777 filterPE.softlight = falsePE.softlight;
778 }
779
780 if (!dehaze->get_active ()) {
781 filterPE.dehaze = falsePE.dehaze;
782 }
783
784 if (!rgbcurves->get_active ()) {
785 filterPE.rgbCurves = falsePE.rgbCurves;
786 }
787
788 if (!colortoning->get_active ()) {
789 filterPE.colorToning = falsePE.colorToning;
790 }
791
792 if (!distortion->get_active ()) {
793 filterPE.distortion = falsePE.distortion;
794 }
795
796 if (!cacorr->get_active ()) {
797 filterPE.cacorrection = falsePE.cacorrection;
798 }
799
800 if (!vignetting->get_active ()) {
801 filterPE.vignetting = falsePE.vignetting;
802 }
803
804 if (!lcp->get_active ()) {
805 filterPE.lensProf = falsePE.lensProf;
806 }
807
808 if (!coarserot->get_active ()) {
809 filterPE.coarse = falsePE.coarse;
810 }
811
812 if (!finerot->get_active ()) {
813 filterPE.rotate = falsePE.rotate;
814 }
815
816 if (!crop->get_active ()) {
817 filterPE.crop = falsePE.crop;
818 }
819
820 if (!resize->get_active ()) {
821 filterPE.resize = falsePE.resize;
822 }
823
824 if (!prsharpening->get_active ()) {
825 filterPE.prsharpening = falsePE.prsharpening;
826 }
827
828 if (!perspective->get_active ()) {
829 filterPE.perspective = falsePE.perspective;
830 }
831
832 if (!commonTrans->get_active ()) {
833 filterPE.commonTrans = falsePE.commonTrans;
834 }
835
836 if (!metadata->get_active()) {
837 filterPE.metadata = falsePE.metadata;
838 }
839
840 if (!exifch->get_active ()) {
841 filterPE.exif = falsePE.exif;
842 }
843
844 if (!iptc->get_active ()) {
845 filterPE.iptc = falsePE.iptc;
846 }
847
848 if (!raw_method->get_active ()) {
849 filterPE.raw.bayersensor.method = falsePE.raw.bayersensor.method;
850 filterPE.raw.bayersensor.dualDemosaicAutoContrast = falsePE.raw.bayersensor.dualDemosaicAutoContrast;
851 filterPE.raw.bayersensor.dualDemosaicContrast = falsePE.raw.bayersensor.dualDemosaicContrast;
852 filterPE.raw.xtranssensor.method = falsePE.raw.xtranssensor.method;
853 filterPE.raw.xtranssensor.dualDemosaicAutoContrast = falsePE.raw.xtranssensor.dualDemosaicAutoContrast;
854 filterPE.raw.xtranssensor.dualDemosaicContrast = falsePE.raw.xtranssensor.dualDemosaicContrast;
855 }
856
857 if (!raw_border->get_active ()) {
858 filterPE.raw.bayersensor.border = falsePE.raw.bayersensor.border;
859 filterPE.raw.xtranssensor.border = falsePE.raw.xtranssensor.border;
860 }
861
862 if (!raw_imagenum->get_active ()) {
863 filterPE.raw.bayersensor.imageNum = falsePE.raw.bayersensor.imageNum;
864 }
865
866 if (!raw_ccSteps->get_active ()) {
867 filterPE.raw.bayersensor.ccSteps = falsePE.raw.bayersensor.ccSteps;
868 filterPE.raw.xtranssensor.ccSteps = falsePE.raw.xtranssensor.ccSteps;
869 }
870
871 if (!raw_dcb_iterations->get_active ()) {
872 filterPE.raw.bayersensor.dcbIterations = falsePE.raw.bayersensor.dcbIterations;
873 }
874
875 if (!raw_dcb_enhance->get_active ()) {
876 filterPE.raw.bayersensor.dcbEnhance = falsePE.raw.bayersensor.dcbEnhance;
877 }
878
879 //if (!raw_all_enhance->get_active ()) filterPE.raw.bayersensor.allEnhance = falsePE.raw.bayersensor.allEnhance;
880 if (!raw_lmmse_iterations->get_active ()) {
881 filterPE.raw.bayersensor.lmmseIterations = falsePE.raw.bayersensor.lmmseIterations;
882 }
883
884 if (!raw_black->get_active ()) {
885 filterPE.raw.bayersensor.exBlack0 = falsePE.raw.bayersensor.exBlack0;
886 filterPE.raw.bayersensor.exBlack1 = falsePE.raw.bayersensor.exBlack1;
887 filterPE.raw.bayersensor.exBlack2 = falsePE.raw.bayersensor.exBlack2;
888 filterPE.raw.bayersensor.exBlack3 = falsePE.raw.bayersensor.exBlack3;
889 filterPE.raw.bayersensor.exTwoGreen = falsePE.raw.bayersensor.exTwoGreen;
890 filterPE.raw.xtranssensor.exBlackRed = falsePE.raw.xtranssensor.exBlackRed;
891 filterPE.raw.xtranssensor.exBlackGreen = falsePE.raw.xtranssensor.exBlackGreen;
892 filterPE.raw.xtranssensor.exBlackBlue = falsePE.raw.xtranssensor.exBlackBlue;
893 }
894
895 if (!raw_pixelshift->get_active ()) {
896 filterPE.raw.bayersensor.pixelShiftBlur = falsePE.raw.bayersensor.pixelShiftBlur;
897 filterPE.raw.bayersensor.pixelShiftEperIso = falsePE.raw.bayersensor.pixelShiftEperIso;
898 filterPE.raw.bayersensor.pixelShiftEqualBright = falsePE.raw.bayersensor.pixelShiftEqualBright;
899 filterPE.raw.bayersensor.pixelShiftEqualBrightChannel = falsePE.raw.bayersensor.pixelShiftEqualBrightChannel;
900 filterPE.raw.bayersensor.pixelShiftGreen = falsePE.raw.bayersensor.pixelShiftGreen;
901 filterPE.raw.bayersensor.pixelShiftHoleFill = falsePE.raw.bayersensor.pixelShiftHoleFill;
902 filterPE.raw.bayersensor.pixelShiftDemosaicMethod = falsePE.raw.bayersensor.pixelShiftDemosaicMethod;
903 filterPE.raw.bayersensor.pixelShiftMedian = falsePE.raw.bayersensor.pixelShiftMedian;
904 filterPE.raw.bayersensor.pixelShiftMotionCorrectionMethod = falsePE.raw.bayersensor.pixelShiftMotionCorrectionMethod;
905 filterPE.raw.bayersensor.pixelShiftNonGreenCross = falsePE.raw.bayersensor.pixelShiftNonGreenCross;
906 filterPE.raw.bayersensor.pixelShiftSigma = falsePE.raw.bayersensor.pixelShiftSigma;
907 filterPE.raw.bayersensor.pixelShiftSmooth = falsePE.raw.bayersensor.pixelShiftSmooth;
908 filterPE.raw.bayersensor.pixelShiftShowMotion = falsePE.raw.bayersensor.pixelShiftShowMotion;
909 filterPE.raw.bayersensor.pixelShiftShowMotionMaskOnly = falsePE.raw.bayersensor.pixelShiftShowMotionMaskOnly;
910 }
911
912 if (!raw_linenoise->get_active ()) {
913 filterPE.raw.bayersensor.linenoise = falsePE.raw.bayersensor.linenoise;
914 filterPE.raw.bayersensor.linenoiseDirection = falsePE.raw.bayersensor.linenoiseDirection;
915 }
916
917 if (!raw_greenthresh->get_active ()) {
918 filterPE.raw.bayersensor.greenEq = falsePE.raw.bayersensor.greenEq;
919 }
920
921 if (!raw_expos->get_active ()) {
922 filterPE.raw.exPos = falsePE.raw.exPos;
923 }
924
925 if (!raw_ca_autocorrect->get_active ()) {
926 filterPE.raw.ca_autocorrect = falsePE.raw.ca_autocorrect;
927 filterPE.raw.caautoiterations = falsePE.raw.caautoiterations;
928 }
929
930 if (!raw_caredblue->get_active ()) {
931 filterPE.raw.cared = falsePE.raw.cared;
932 filterPE.raw.cablue = falsePE.raw.cablue;
933 }
934
935 if (!raw_ca_avoid_colourshift->get_active ()) {
936 filterPE.raw.ca_avoidcolourshift = falsePE.raw.ca_avoidcolourshift;
937 }
938
939 if (!raw_hotpix_filt->get_active ()) {
940 filterPE.raw.hotPixelFilter = falsePE.raw.hotPixelFilter;
941 }
942
943 if (!raw_deadpix_filt->get_active ()) {
944 filterPE.raw.deadPixelFilter = falsePE.raw.deadPixelFilter;
945 }
946
947 if (!raw_deadpix_filt->get_active () && !raw_hotpix_filt->get_active ()) {
948 filterPE.raw.hotdeadpix_thresh = falsePE.raw.hotdeadpix_thresh;
949 }
950
951 if (!raw_pdaf_lines_filter->get_active ()) {
952 filterPE.raw.bayersensor.pdafLinesFilter = falsePE.raw.bayersensor.pdafLinesFilter;
953 }
954
955 if (!df_file->get_active ()) {
956 filterPE.raw.darkFrame = falsePE.raw.darkFrame;
957 }
958
959 if (!df_AutoSelect->get_active ()) {
960 filterPE.raw.df_autoselect = falsePE.raw.df_autoselect;
961 }
962
963 if (!ff_file->get_active ()) {
964 filterPE.raw.ff_file = falsePE.raw.ff_file;
965 }
966
967 if (!ff_AutoSelect->get_active ()) {
968 filterPE.raw.ff_AutoSelect = falsePE.raw.ff_AutoSelect;
969 }
970
971 if (!ff_BlurRadius->get_active ()) {
972 filterPE.raw.ff_BlurRadius = falsePE.raw.ff_BlurRadius;
973 }
974
975 if (!ff_BlurType->get_active ()) {
976 filterPE.raw.ff_BlurType = falsePE.raw.ff_BlurType;
977 }
978
979 if (!ff_ClipControl->get_active ()) {
980 filterPE.raw.ff_clipControl = falsePE.raw.ff_clipControl;
981 filterPE.raw.ff_AutoClipControl = falsePE.raw.ff_AutoClipControl;
982 }
983
984 if (!filmNegative->get_active ()) {
985 filterPE.filmNegative.enabled = falsePE.filmNegative.enabled;
986 filterPE.filmNegative.redRatio = falsePE.filmNegative.redRatio;
987 filterPE.filmNegative.greenExp = falsePE.filmNegative.greenExp;
988 filterPE.filmNegative.blueRatio = falsePE.filmNegative.blueRatio;
989 }
990
991 if (!captureSharpening->get_active ()) {
992 filterPE.pdsharpening.enabled = falsePE.pdsharpening.enabled;
993 filterPE.pdsharpening.contrast = falsePE.pdsharpening.contrast;
994 filterPE.pdsharpening.autoContrast = falsePE.pdsharpening.autoContrast;
995 filterPE.pdsharpening.autoRadius = falsePE.pdsharpening.autoRadius;
996 filterPE.pdsharpening.deconvradius = falsePE.pdsharpening.deconvradius;
997 filterPE.pdsharpening.deconvradiusOffset = falsePE.pdsharpening.deconvradiusOffset;
998 filterPE.pdsharpening.deconviter = falsePE.pdsharpening.deconviter;
999 filterPE.pdsharpening.deconvitercheck = falsePE.pdsharpening.deconvitercheck;
1000 }
1001
1002 if (dstPE) {
1003 *dstPE = filterPE;
1004 }
1005
1006 // Apply the filter!
1007 filterPE.combine(*dstPP, *srcPP, true);
1008 }
1009