merge with dev

This commit is contained in:
Desmis 2019-11-10 08:56:38 +01:00
commit e79bb87c91
99 changed files with 482 additions and 199 deletions

View File

@ -106,6 +106,7 @@ set(RTENGINESOURCEFILES
lj92.c
loadinitial.cc
myfile.cc
panasonic_decoders.cc
pdaflinesfilter.cc
PF_correct_RT.cc
pipettebuffer.cc

View File

@ -2142,6 +2142,11 @@ Camera constants:
}
},
{ // Quality B, per ISO info missing
"make_model": [ "Panasonic DC-S1", "Panasonic DC-S1R" ],
"ranges": { "white": 16225 }
},
{ // Quality B, per ISO info missing
"make_model": "PENTAX K-x",
"dcraw_matrix": [ 8843,-2837,-625,-5025,12644,2668,-411,1234,7410 ], // adobe dcp d65

View File

@ -2688,93 +2688,6 @@ void CLASS canon_rmf_load_raw()
maximum = curve[0x3ff];
}
unsigned CLASS pana_bits_t::operator() (int nbits, unsigned *bytes)
{
/*RT static uchar buf[0x4000]; */
/*RT static int vbits;*/
int byte;
if (!nbits && !bytes) return vbits=0;
if (!vbits) {
fread (buf+load_flags, 1, 0x4000-load_flags, ifp);
fread (buf, 1, load_flags, ifp);
}
if (encoding == 5) {
for (byte = 0; byte < 16; byte++)
{
bytes[byte] = buf[vbits++];
vbits &= 0x3FFF;
}
return 0;
} else {
vbits = (vbits - nbits) & 0x1ffff;
byte = vbits >> 3 ^ 0x3ff0;
return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits);
}
}
void CLASS panasonic_load_raw()
{
pana_bits_t pana_bits(ifp,load_flags, RT_pana_info.encoding);
int row, col, i, j, sh=0, pred[2], nonz[2];
unsigned bytes[16] = {};
ushort *raw_block_data;
pana_bits(0, 0);
int enc_blck_size = RT_pana_info.bpp == 12 ? 10 : 9;
if (RT_pana_info.encoding == 5) {
for (row = 0; row < raw_height; row++)
{
raw_block_data = raw_image + row * raw_width;
for (col = 0; col < raw_width; col += enc_blck_size) {
pana_bits(0, bytes);
if (RT_pana_info.bpp == 12) {
raw_block_data[col] = ((bytes[1] & 0xF) << 8) + bytes[0];
raw_block_data[col + 1] = 16 * bytes[2] + (bytes[1] >> 4);
raw_block_data[col + 2] = ((bytes[4] & 0xF) << 8) + bytes[3];
raw_block_data[col + 3] = 16 * bytes[5] + (bytes[4] >> 4);
raw_block_data[col + 4] = ((bytes[7] & 0xF) << 8) + bytes[6];
raw_block_data[col + 5] = 16 * bytes[8] + (bytes[7] >> 4);
raw_block_data[col + 6] = ((bytes[10] & 0xF) << 8) + bytes[9];
raw_block_data[col + 7] = 16 * bytes[11] + (bytes[10] >> 4);
raw_block_data[col + 8] = ((bytes[13] & 0xF) << 8) + bytes[12];
raw_block_data[col + 9] = 16 * bytes[14] + (bytes[13] >> 4);
}
else if (RT_pana_info.bpp == 14) {
raw_block_data[col] = bytes[0] + ((bytes[1] & 0x3F) << 8);
raw_block_data[col + 1] = (bytes[1] >> 6) + 4 * (bytes[2]) +
((bytes[3] & 0xF) << 10);
raw_block_data[col + 2] = (bytes[3] >> 4) + 16 * (bytes[4]) +
((bytes[5] & 3) << 12);
raw_block_data[col + 3] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);
raw_block_data[col + 4] = bytes[7] + ((bytes[8] & 0x3F) << 8);
raw_block_data[col + 5] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);
raw_block_data[col + 6] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);
raw_block_data[col + 7] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);
raw_block_data[col + 8] = bytes[14] + ((bytes[15] & 0x3F) << 8);
}
}
}
} else {
for (row=0; row < height; row++)
for (col=0; col < raw_width; col++) {
if ((i = col % 14) == 0)
pred[0] = pred[1] = nonz[0] = nonz[1] = 0;
if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2));
if (nonz[i & 1]) {
if ((j = pana_bits(8))) {
if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4)
pred[i & 1] &= ~(-1 << sh);
pred[i & 1] += j << sh;
}
} else if ((nonz[i & 1] = pana_bits(8)) || i > 11)
pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4);
if ((RAW(row,col) = pred[col & 1]) > 4098 && col < width) derror();
}
}
}
void CLASS olympus_load_raw()
{
@ -10759,8 +10672,6 @@ void CLASS nikon_14bit_load_raw()
free(buf);
}
//-----------------------------------------------------------------------------
/* RT: Delete from here */
/*RT*/#undef SQR
/*RT*/#undef MAX

View File

@ -411,6 +411,9 @@ private:
unsigned encoding;
};
void panasonicC6_load_raw();
void panasonicC7_load_raw();
void canon_rmf_load_raw();
void panasonic_load_raw();
void olympus_load_raw();

View File

@ -0,0 +1,278 @@
/*
* This file is part of RawTherapee.
*
* RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* RawTherapee is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
*/
#include <iostream>
#include "dcraw.h"
// Code adapted from libraw
/* -*- C++ -*-
* Copyright 2019 LibRaw LLC (info@libraw.org)
*
LibRaw is free software; you can redistribute it and/or modify
it under the terms of the one of two licenses as you choose:
1. GNU LESSER GENERAL PUBLIC LICENSE version 2.1
(See file LICENSE.LGPL provided in LibRaw distribution archive for details).
2. COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
(See file LICENSE.CDDL provided in LibRaw distribution archive for details).
*/
unsigned DCraw::pana_bits_t::operator() (int nbits, unsigned *bytes)
{
int byte;
if (!nbits && !bytes) {
return vbits=0;
}
if (!vbits) {
fread (buf+load_flags, 1, 0x4000-load_flags, ifp);
fread (buf, 1, load_flags, ifp);
}
if (encoding == 5) {
for (byte = 0; byte < 16; byte++)
{
bytes[byte] = buf[vbits++];
vbits &= 0x3FFF;
}
return 0;
} else {
vbits = (vbits - nbits) & 0x1ffff;
byte = vbits >> 3 ^ 0x3ff0;
return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits);
}
}
class pana_cs6_page_decoder
{
unsigned int pixelbuffer[14], lastoffset, maxoffset;
unsigned char current, *buffer;
public:
pana_cs6_page_decoder(unsigned char *_buffer, unsigned int bsize)
: lastoffset(0), maxoffset(bsize), current(0), buffer(_buffer)
{
}
void read_page(); // will throw IO error if not enough space in buffer
unsigned int nextpixel()
{
return current < 14 ? pixelbuffer[current++] : 0;
}
};
#define wbuffer(i) ((unsigned short)buffer[lastoffset + 15 - i])
void pana_cs6_page_decoder::read_page()
{
if (!buffer || (maxoffset - lastoffset < 16))
;
pixelbuffer[0] = (wbuffer(0) << 6) | (wbuffer(1) >> 2); // 14 bit
pixelbuffer[1] = (((wbuffer(1) & 0x3) << 12) | (wbuffer(2) << 4) | (wbuffer(3) >> 4)) & 0x3fff;
pixelbuffer[2] = (wbuffer(3) >> 2) & 0x3;
pixelbuffer[3] = ((wbuffer(3) & 0x3) << 8) | wbuffer(4);
pixelbuffer[4] = (wbuffer(5) << 2) | (wbuffer(6) >> 6);
pixelbuffer[5] = ((wbuffer(6) & 0x3f) << 4) | (wbuffer(7) >> 4);
pixelbuffer[6] = (wbuffer(7) >> 2) & 0x3;
pixelbuffer[7] = ((wbuffer(7) & 0x3) << 8) | wbuffer(8);
pixelbuffer[8] = ((wbuffer(9) << 2) & 0x3fc) | (wbuffer(10) >> 6);
pixelbuffer[9] = ((wbuffer(10) << 4) | (wbuffer(11) >> 4)) & 0x3ff;
pixelbuffer[10] = (wbuffer(11) >> 2) & 0x3;
pixelbuffer[11] = ((wbuffer(11) & 0x3) << 8) | wbuffer(12);
pixelbuffer[12] = (((wbuffer(13) << 2) & 0x3fc) | wbuffer(14) >> 6) & 0x3ff;
pixelbuffer[13] = ((wbuffer(14) << 4) | (wbuffer(15) >> 4)) & 0x3ff;
current = 0;
lastoffset += 16;
}
#undef wbuffer
void DCraw::panasonic_load_raw()
{
int enc_blck_size = RT_pana_info.bpp == 12 ? 10 : 9;
if (RT_pana_info.encoding == 5) {
pana_bits_t pana_bits(ifp, load_flags, RT_pana_info.encoding);
pana_bits(0, 0);
unsigned bytes[16] = {};
for (int row = 0; row < raw_height; ++row) {
ushort* raw_block_data = raw_image + row * raw_width;
for (int col = 0; col < raw_width; col += enc_blck_size) {
pana_bits(0, bytes);
if (RT_pana_info.bpp == 12) {
raw_block_data[col] = ((bytes[1] & 0xF) << 8) + bytes[0];
raw_block_data[col + 1] = 16 * bytes[2] + (bytes[1] >> 4);
raw_block_data[col + 2] = ((bytes[4] & 0xF) << 8) + bytes[3];
raw_block_data[col + 3] = 16 * bytes[5] + (bytes[4] >> 4);
raw_block_data[col + 4] = ((bytes[7] & 0xF) << 8) + bytes[6];
raw_block_data[col + 5] = 16 * bytes[8] + (bytes[7] >> 4);
raw_block_data[col + 6] = ((bytes[10] & 0xF) << 8) + bytes[9];
raw_block_data[col + 7] = 16 * bytes[11] + (bytes[10] >> 4);
raw_block_data[col + 8] = ((bytes[13] & 0xF) << 8) + bytes[12];
raw_block_data[col + 9] = 16 * bytes[14] + (bytes[13] >> 4);
}
else if (RT_pana_info.bpp == 14) {
raw_block_data[col] = bytes[0] + ((bytes[1] & 0x3F) << 8);
raw_block_data[col + 1] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);
raw_block_data[col + 2] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);
raw_block_data[col + 3] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);
raw_block_data[col + 4] = bytes[7] + ((bytes[8] & 0x3F) << 8);
raw_block_data[col + 5] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);
raw_block_data[col + 6] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);
raw_block_data[col + 7] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);
raw_block_data[col + 8] = bytes[14] + ((bytes[15] & 0x3F) << 8);
}
}
}
} else if (RT_pana_info.encoding == 6) {
panasonicC6_load_raw();
} else if (RT_pana_info.encoding == 7) {
panasonicC7_load_raw();
} else {
pana_bits_t pana_bits(ifp, load_flags, RT_pana_info.encoding);
pana_bits(0, 0);
int sh = 0, pred[2], nonz[2];
for (int row = 0; row < height; ++row) {
for (int col = 0; col < raw_width; ++col) {
int i;
if ((i = col % 14) == 0) {
pred[0] = pred[1] = nonz[0] = nonz[1] = 0;
}
if (i % 3 == 2) {
sh = 4 >> (3 - pana_bits(2));
}
if (nonz[i & 1]) {
int j;
if ((j = pana_bits(8))) {
if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4) {
pred[i & 1] &= ~(-1 << sh);
}
pred[i & 1] += j << sh;
}
} else if ((nonz[i & 1] = pana_bits(8)) || i > 11) {
pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4);
}
if ((raw_image[(row)*raw_width+(col)] = pred[col & 1]) > 4098 && col < width) {
derror();
}
}
}
}
}
void DCraw::panasonicC6_load_raw()
{
constexpr int rowstep = 16;
const int blocksperrow = raw_width / 11;
const int rowbytes = blocksperrow * 16;
unsigned char *iobuf = (unsigned char *)malloc(rowbytes * rowstep);
merror(iobuf, "panasonicC6_load_raw()");
for (int row = 0; row < raw_height - rowstep + 1; row += rowstep) {
const int rowstoread = MIN(rowstep, raw_height - row);
fread(iobuf, rowbytes, rowstoread, ifp);
pana_cs6_page_decoder page(iobuf, rowbytes * rowstoread);
for (int crow = 0, col = 0; crow < rowstoread; ++crow, col = 0) {
unsigned short *rowptr = &raw_image[(row + crow) * raw_width];
for (int rblock = 0; rblock < blocksperrow; rblock++) {
page.read_page();
unsigned oddeven[2] = {0, 0}, nonzero[2] = {0, 0};
unsigned pmul = 0, pixel_base = 0;
for (int pix = 0; pix < 11; ++pix) {
if (pix % 3 == 2) {
unsigned base = page.nextpixel();
if (base > 3) {
derror();
}
if (base == 3) {
base = 4;
}
pixel_base = 0x200 << base;
pmul = 1 << base;
}
unsigned epixel = page.nextpixel();
if (oddeven[pix % 2]) {
epixel *= pmul;
if (pixel_base < 0x2000 && nonzero[pix % 2] > pixel_base) {
epixel += nonzero[pix % 2] - pixel_base;
}
nonzero[pix % 2] = epixel;
} else {
oddeven[pix % 2] = epixel;
if (epixel) {
nonzero[pix % 2] = epixel;
} else {
epixel = nonzero[pix % 2];
}
}
const unsigned spix = epixel - 0xf;
if (spix <= 0xffff) {
rowptr[col++] = spix & 0xffff;
} else {
epixel = (((signed int)(epixel + 0x7ffffff1)) >> 0x1f);
rowptr[col++] = epixel & 0x3fff;
}
}
}
}
}
free(iobuf);
tiff_bps = RT_pana_info.bpp;
}
void DCraw::panasonicC7_load_raw()
{
constexpr int rowstep = 16;
const int pixperblock = RT_pana_info.bpp == 14 ? 9 : 10;
const int rowbytes = raw_width / pixperblock * 16;
unsigned char *iobuf = (unsigned char *)malloc(rowbytes * rowstep);
merror(iobuf, "panasonicC7_load_raw()");
for (int row = 0; row < raw_height - rowstep + 1; row += rowstep) {
const int rowstoread = MIN(rowstep, raw_height - row);
fread (iobuf, rowbytes, rowstoread, ifp);
unsigned char *bytes = iobuf;
for (int crow = 0; crow < rowstoread; crow++) {
ushort *rowptr = &raw_image[(row + crow) * raw_width];
for (int col = 0; col < raw_width - pixperblock + 1; col += pixperblock, bytes += 16) {
if (RT_pana_info.bpp == 14) {
rowptr[col] = bytes[0] + ((bytes[1] & 0x3F) << 8);
rowptr[col + 1] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);
rowptr[col + 2] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);
rowptr[col + 3] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);
rowptr[col + 4] = bytes[7] + ((bytes[8] & 0x3F) << 8);
rowptr[col + 5] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);
rowptr[col + 6] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);
rowptr[col + 7] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);
rowptr[col + 8] = bytes[14] + ((bytes[15] & 0x3F) << 8);
} else if (RT_pana_info.bpp == 12) { // have not seen in the wild yet
rowptr[col] = ((bytes[1] & 0xF) << 8) + bytes[0];
rowptr[col + 1] = 16 * bytes[2] + (bytes[1] >> 4);
rowptr[col + 2] = ((bytes[4] & 0xF) << 8) + bytes[3];
rowptr[col + 3] = 16 * bytes[5] + (bytes[4] >> 4);
rowptr[col + 4] = ((bytes[7] & 0xF) << 8) + bytes[6];
rowptr[col + 5] = 16 * bytes[8] + (bytes[7] >> 4);
rowptr[col + 6] = ((bytes[10] & 0xF) << 8) + bytes[9];
rowptr[col + 7] = 16 * bytes[11] + (bytes[10] >> 4);
rowptr[col + 8] = ((bytes[13] & 0xF) << 8) + bytes[12];
rowptr[col + 9] = 16 * bytes[14] + (bytes[13] >> 4);
}
}
}
}
free(iobuf);
tiff_bps = RT_pana_info.bpp;
}

View File

@ -19,7 +19,6 @@
#pragma once
#include "array2D.h"
#include "coord.h"
#include "iimage.h"
class EditDataProvider;

View File

@ -54,13 +54,13 @@ Interpreter stdInterpreter;
//-----------------------------------------------------------------------------
TagDirectory::TagDirectory ()
: attribs (ifdAttribs), order (HOSTORDER), parent (nullptr) {}
: attribs (ifdAttribs), order (HOSTORDER), parent (nullptr), parseJPEG(true) {}
TagDirectory::TagDirectory (TagDirectory* p, const TagAttrib* ta, ByteOrder border)
: attribs (ta), order (border), parent (p) {}
: attribs (ta), order (border), parent (p), parseJPEG(true) {}
TagDirectory::TagDirectory (TagDirectory* p, FILE* f, int base, const TagAttrib* ta, ByteOrder border, bool skipIgnored)
: attribs (ta), order (border), parent (p)
TagDirectory::TagDirectory (TagDirectory* p, FILE* f, int base, const TagAttrib* ta, ByteOrder border, bool skipIgnored, bool parseJpeg)
: attribs (ta), order (border), parent (p), parseJPEG(parseJpeg)
{
int numOfTags = get2 (f, order);
@ -980,9 +980,10 @@ Tag::Tag (TagDirectory* p, FILE* f, int base)
}
}
if (tag == 0x002e) { // location of the embedded preview image in raw files of Panasonic cameras
if (parent->getParseJpeg() && tag == 0x002e) { // location of the embedded preview image in raw files of Panasonic cameras
ExifManager eManager(f, nullptr, true);
const auto fpos = ftell(f);
if (fpos >= 0) {
eManager.parseJPEG(fpos); // try to parse the exif data from the preview image
@ -1239,7 +1240,7 @@ defsubdirs:
for (size_t j = 0, i = 0; j < count; j++, i++) {
int newpos = base + toInt (j * 4, LONG);
fseek (f, newpos, SEEK_SET);
directory[i] = new TagDirectory (parent, f, base, attrib->subdirAttribs, order);
directory[i] = new TagDirectory (parent, f, base, attrib->subdirAttribs, order, true, parent->getParseJpeg());
}
// set the terminating NULL
@ -1374,7 +1375,7 @@ bool Tag::parseMakerNote (FILE* f, int base, ByteOrder bom )
value = new unsigned char[12];
fread (value, 1, 12, f);
directory = new TagDirectory*[2];
directory[0] = new TagDirectory (parent, f, base, panasonicAttribs, bom);
directory[0] = new TagDirectory (parent, f, base, panasonicAttribs, bom, true, parent->getParseJpeg());
directory[1] = nullptr;
} else {
return false;
@ -2777,7 +2778,7 @@ void ExifManager::parseStd (bool skipIgnored) {
parse(false, skipIgnored);
}
void ExifManager::parse (bool isRaw, bool skipIgnored)
void ExifManager::parse (bool isRaw, bool skipIgnored, bool parseJpeg)
{
int ifdOffset = IFDOffset;
@ -2806,7 +2807,7 @@ void ExifManager::parse (bool isRaw, bool skipIgnored)
fseek (f, rml->exifBase + ifdOffset, SEEK_SET);
// first read the IFD directory
TagDirectory* root = new TagDirectory (nullptr, f, rml->exifBase, ifdAttribs, order, skipIgnored);
TagDirectory* root = new TagDirectory (nullptr, f, rml->exifBase, ifdAttribs, order, skipIgnored, parseJpeg);
// fix ISO issue with nikon and panasonic cameras
Tag* make = root->getTag ("Make");
@ -3174,7 +3175,7 @@ void ExifManager::parseJPEG (int offset)
rml.reset(new rtengine::RawMetaDataLocation(0));
}
rml->exifBase = tiffbase;
parse (false);
parse (false, true, false);
if (rmlCreated) {
rml.reset();
}

View File

@ -119,11 +119,12 @@ protected:
const TagAttrib* attribs; // descriptor table to decode the tags
ByteOrder order; // byte order
TagDirectory* parent; // parent directory (NULL if root)
bool parseJPEG;
static Glib::ustring getDumpKey (int tagID, const Glib::ustring &tagName);
public:
TagDirectory ();
TagDirectory (TagDirectory* p, FILE* f, int base, const TagAttrib* ta, ByteOrder border, bool skipIgnored = true);
TagDirectory (TagDirectory* p, FILE* f, int base, const TagAttrib* ta, ByteOrder border, bool skipIgnored = true, bool parseJpeg = true);
TagDirectory (TagDirectory* p, const TagAttrib* ta, ByteOrder border);
virtual ~TagDirectory ();
@ -135,6 +136,10 @@ public:
{
return parent;
}
inline bool getParseJpeg() const
{
return parseJPEG;
}
TagDirectory* getRoot ();
inline int getCount () const
{
@ -346,7 +351,7 @@ class ExifManager
Tag* saveCIFFMNTag (TagDirectory* root, int len, const char* name);
void parseCIFF (int length, TagDirectory* root);
void parse (bool isRaw, bool skipIgnored = true);
void parse (bool isRaw, bool skipIgnored = true, bool parseJpeg = true);
public:
FILE* f;

View File

@ -31,6 +31,7 @@
#include "cachemanager.h"
#include "thumbnail.h"
#include "batchqueue.h"
#include "batchqueueentry.h"
#include "multilangmgr.h"
#include "filecatalog.h"
#include "batchqueuebuttonset.h"

View File

@ -21,7 +21,6 @@
#include <gtkmm.h>
#include "batchqueueentry.h"
#include "lwbutton.h"
#include "lwbuttonset.h"
#include "threadutils.h"
@ -30,6 +29,8 @@
#include "../rtengine/rtengine.h"
#include "../rtengine/noncopyable.h"
class BatchQueueEntry;
class BatchQueueListener
{

View File

@ -29,6 +29,7 @@
class RTWindow;
class FileCatalog;
class Thumbnail;
class BatchQueuePanel : public Gtk::VBox,
public BatchQueueListener,
public FormatChangeListener

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class BayerPreProcess : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
class BayerPreProcess final : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
{
protected:

View File

@ -25,7 +25,7 @@
#include "guiutils.h"
#include "toolpanel.h"
class BayerProcess :
class BayerProcess final :
public ToolParamBlock,
public AdjusterListener,
public CheckBoxListener,

View File

@ -24,7 +24,7 @@
#include "checkbox.h"
#include "toolpanel.h"
class BayerRAWExposure :
class BayerRAWExposure final :
public ToolParamBlock,
public AdjusterListener,
public CheckBoxListener,

View File

@ -21,6 +21,8 @@
#include "blackwhite.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "guiutils.h"
#include "rtimage.h"
#include "options.h"

View File

@ -22,13 +22,14 @@
#include "adjuster.h"
#include "colorprovider.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "curvelistener.h"
#include "guiutils.h"
#include "mycurve.h"
#include "toolpanel.h"
class DiagonalCurveEditor;
class CurveEditorGroup;
class EditDataProvider;
class FlatCurveEditor;
class BlackWhite final :
public ToolParamBlock,

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class CACorrection :
class CACorrection final:
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class ChMixer :
class ChMixer final:
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -22,7 +22,7 @@
#include "toolpanel.h"
class CoarsePanel :
class CoarsePanel final :
public Gtk::HBox,
public ToolPanel
{

View File

@ -20,6 +20,8 @@
#include "colorappearance.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "guiutils.h"
#include "options.h"
#include "rtimage.h"

View File

@ -22,11 +22,14 @@
#include "adjuster.h"
#include "colorprovider.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "curvelistener.h"
#include "guiutils.h"
#include "toolpanel.h"
class DiagonalCurveEditor;
class CurveEditorGroup;
class CurveEditor;
class ColorAppearance final :
public ToolParamBlock,
public AdjusterListener,

View File

@ -2,6 +2,8 @@
* This file is part of RawTherapee.
*/
#include "colortoning.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "mycurve.h"
#include "rtimage.h"
#include "eventmapper.h"

View File

@ -7,15 +7,19 @@
#include "adjuster.h"
#include "colorprovider.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "curvelistener.h"
#include "guiutils.h"
#include "labgrid.h"
#include "thresholdadjuster.h"
#include "toolpanel.h"
#include "../rtengine/procparams.h"
class CurveEditor;
class CurveEditorGroup;
class DiagonalCurveEditor;
class FlatCurveEditor;
class LabGrid;
class ColorToning final :
public ToolParamBlock,
public FoldableToolPanel,

View File

@ -21,6 +21,7 @@
#include <string>
#include "guiutils.h"
#include "multilangmgr.h"
#include "popuptogglebutton.h"
#include "../rtengine/LUT.h"
#include <cstring>

View File

@ -20,7 +20,6 @@
#include "coloredbar.h"
#include "editcallbacks.h"
#include "popuptogglebutton.h"
#include "../rtengine/diagonalcurvetypes.h"
#include "../rtengine/flatcurvetypes.h"
@ -29,6 +28,7 @@
class CurveEditorGroup;
class CurveEditorSubGroup;
class PopUpToggleButton;
/*
*********************** Curve Editor ***********************
@ -143,7 +143,7 @@ public:
*/
class DiagonalCurveEditor : public CurveEditor
class DiagonalCurveEditor final : public CurveEditor
{
friend class DiagonalCurveEditorSubGroup;
@ -179,7 +179,7 @@ public:
*/
class FlatCurveEditor : public CurveEditor
class FlatCurveEditor final : public CurveEditor
{
friend class FlatCurveEditorSubGroup;

View File

@ -24,6 +24,7 @@
#include "diagonalcurveeditorsubgroup.h"
#include "flatcurveeditorsubgroup.h"
#include "multilangmgr.h"
#include "popuptogglebutton.h"
#include "rtimage.h"
#include "options.h"
#include "pathutils.h"

View File

@ -41,7 +41,7 @@ class FlatCurveEditorSubGroup;
* - to start a new line of curve button, use the 'newLine' method
* - if you add more than one curve, you must add a "CurveEditor* ce" parameter to your listener
*/
class CurveEditorGroup : public Gtk::Grid, public CurveListener
class CurveEditorGroup final : public Gtk::Grid, public CurveListener
{
friend class CurveEditor;

View File

@ -41,7 +41,7 @@ public:
// add other info here
};
class DarkFrame :
class DarkFrame final:
public ToolParamBlock,
public FoldableToolPanel
{

View File

@ -20,6 +20,8 @@
#include <iomanip>
#include "defringe.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "options.h"
#include "../rtengine/color.h"

View File

@ -22,12 +22,14 @@
#include "adjuster.h"
#include "colorprovider.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "curvelistener.h"
#include "guiutils.h"
#include "toolpanel.h"
class Defringe :
class CurveEditorGroup;
class FlatCurveEditor;
class Defringe final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel,

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class Dehaze: public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
class Dehaze final : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
{
private:
Adjuster *strength;

View File

@ -32,6 +32,7 @@
#include "diagonalcurveeditorsubgroup.h"
#include "rtimage.h"
#include "options.h"
#include "popuptogglebutton.h"
#include "../rtengine/curves.h"

View File

@ -21,6 +21,8 @@
#include "dirpyrdenoise.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "editbuffer.h"
#include "guiutils.h"
#include "options.h"

View File

@ -22,11 +22,13 @@
#include "adjuster.h"
#include "colorprovider.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "curvelistener.h"
#include "guiutils.h"
#include "toolpanel.h"
class CurveEditor;
class CurveEditorGroup;
class FlatCurveEditor;
class EditDataProvider;
class DirPyrDenoise final :

View File

@ -25,7 +25,7 @@
#include "thresholdadjuster.h"
#include "toolpanel.h"
class DirPyrEqualizer :
class DirPyrEqualizer final :
public ToolParamBlock,
public ThresholdAdjusterListener,
public AdjusterListener,

View File

@ -24,7 +24,7 @@
#include "lensgeomlistener.h"
#include "toolpanel.h"
class Distortion :
class Distortion final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -19,9 +19,14 @@
#pragma once
#include "editid.h"
#include "../rtengine/coord.h"
#include <cairomm/cairomm.h>
namespace rtengine {
struct Coord;
}
class EditDataProvider;
class EditSubscriber;

View File

@ -24,6 +24,7 @@
#include "../rtengine/imagesource.h"
#include "../rtengine/iccstore.h"
#include "batchqueue.h"
#include "batchqueueentry.h"
#include "soundman.h"
#include "rtimage.h"
#include "rtwindow.h"

View File

@ -21,7 +21,6 @@
#include <gtkmm.h>
#include "batchqueueentry.h"
#include "filepanel.h"
#include "histogrampanel.h"
#include "history.h"
@ -35,7 +34,9 @@
#include "../rtengine/noncopyable.h"
#include "../rtengine/rtengine.h"
class BatchQueueEntry;
class EditorPanel;
class FilePanel;
class MyProgressBar;
class Thumbnail;
class ToolPanelCoordinator;

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class EdgePreservingDecompositionUI :
class EdgePreservingDecompositionUI final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class FattalToneMapping: public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
class FattalToneMapping final : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
{
protected:
Adjuster *threshold;

View File

@ -21,6 +21,7 @@
#include <cstring>
#include <iomanip>
#include "cropguilistener.h"
#include "cursormanager.h"
#include "guiutils.h"
#include "inspector.h"
@ -28,6 +29,7 @@
#include "threadutils.h"
#include "thumbbrowserbase.h"
#include "thumbnail.h"
#include "toolbar.h"
#include "../rtengine/procparams.h"

View File

@ -36,6 +36,7 @@
#include "renamedlg.h"
#include "thumbimageupdater.h"
#include "batchqueue.h"
#include "batchqueueentry.h"
#include "placesbrowser.h"
#include "pathutils.h"
#include "thumbnail.h"

View File

@ -22,7 +22,6 @@
#include <gtkmm.h>
#include "filebrowserentry.h"
#include "lwbuttonset.h"
class FileBrowserEntry;

View File

@ -26,7 +26,6 @@
#include "editcallbacks.h"
#include "guiutils.h"
#include "toolpanel.h"
#include "wbprovider.h"
class FilmNegProvider
{
@ -36,7 +35,7 @@ public:
virtual bool getFilmNegativeExponents(rtengine::Coord spotA, rtengine::Coord spotB, std::array<float, 3>& newExps) = 0;
};
class FilmNegative :
class FilmNegative final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel,

View File

@ -10,7 +10,7 @@
#include "guiutils.h"
#include "toolpanel.h"
class ClutComboBox :
class ClutComboBox final :
public MyComboBox
{
public:

View File

@ -33,6 +33,7 @@
#include "flatcurveeditorsubgroup.h"
#include "rtimage.h"
#include "options.h"
#include "popuptogglebutton.h"
#include "../rtengine/curves.h"

View File

@ -42,7 +42,7 @@ public:
// add other info here
};
class FlatField : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public rtengine::FlatFieldAutoClipListener
class FlatField final : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public rtengine::FlatFieldAutoClipListener
{
protected:

View File

@ -10,7 +10,7 @@
#include "guiutils.h"
#include "toolpanel.h"
class Gradient :
class Gradient final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel,

View File

@ -18,6 +18,8 @@
*/
#include "hsvequalizer.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "options.h"
#include "../rtengine/color.h"

View File

@ -22,12 +22,15 @@
#include "adjuster.h"
#include "colorprovider.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "curvelistener.h"
#include "guiutils.h"
#include "toolpanel.h"
class HSVEqualizer :
class CurveEditor;
class CurveEditorGroup;
class FlatCurveEditor;
class HSVEqualizer final :
public ToolParamBlock,
public FoldableToolPanel,
public CurveListener,

View File

@ -36,7 +36,7 @@ public:
virtual void saveInputICCReference(const Glib::ustring& fname, bool apply_wb) = 0;
};
class ICMPanel :
class ICMPanel final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -18,10 +18,9 @@
*/
#pragma once
#include "cropguilistener.h"
#include "toolbar.h"
class CropGUIListener;
class Thumbnail;
class ToolBar;
class ImageAreaToolListener
{

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class ImpulseDenoise :
class ImpulseDenoise final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -20,6 +20,8 @@
#include "labcurve.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "options.h"
#include "../rtengine/color.h"

View File

@ -22,13 +22,15 @@
#include "adjuster.h"
#include "colorprovider.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "curvelistener.h"
#include "toolpanel.h"
class CurveEditorGroup;
class DiagonalCurveEditor;
class EditDataProvider;
class FlatCurveEditor;
class LCurve :
class LCurve final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel,

View File

@ -43,7 +43,7 @@
#include "toolpanel.h"
class LabGridArea: public Gtk::DrawingArea, public BackBuffer {
class LabGridArea final : public Gtk::DrawingArea, public BackBuffer {
private:
rtengine::ProcEvent evt;
Glib::ustring evtMsg;

View File

@ -23,7 +23,7 @@
#include "lensgeomlistener.h"
#include "toolpanel.h"
class LensGeometry :
class LensGeometry final :
public ToolParamBlock,
public FoldableToolPanel
{

View File

@ -21,7 +21,6 @@
#include <gtkmm.h>
#include "guiutils.h"
#include "lensgeom.h"
#include "toolpanel.h"
class LensProfilePanel final :

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class LocalContrast: public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
class LocalContrast final : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
{
private:
Adjuster *radius;

View File

@ -8,7 +8,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class PCVignette :
class PCVignette final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class PerspCorrection :
class PerspCorrection final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -18,10 +18,14 @@
*/
#pragma once
#include <glibmm/ustring.h>
struct ParamsEdited;
namespace Glib
{
class ustring;
}
namespace rtengine
{

View File

@ -24,7 +24,7 @@
#include "guiutils.h"
#include "toolpanel.h"
class PreProcess :
class PreProcess final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -18,8 +18,12 @@
*/
#pragma once
#include <glibmm/ustring.h>
namespace Glib
{
class ustring;
}
namespace rtengine
{

View File

@ -24,7 +24,7 @@
#include "thresholdadjuster.h"
#include "toolpanel.h"
class PrSharpening :
class PrSharpening final :
public ToolParamBlock,
public ThresholdAdjusterListener,
public AdjusterListener,

View File

@ -24,7 +24,7 @@
#include "checkbox.h"
#include "toolpanel.h"
class RAWCACorr :
class RAWCACorr final:
public ToolParamBlock,
public AdjusterListener,
public CheckBoxListener,

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class RAWExposure :
class RAWExposure final:
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel
@ -32,8 +32,6 @@ class RAWExposure :
protected:
Adjuster* PexPos;
private:
// Gtk::CheckButton* PextwoGreen;
public:
RAWExposure ();

View File

@ -2,6 +2,9 @@
* This file is part of RawTherapee.
*/
#include "retinex.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "mycurve.h"
#include "rtimage.h"
#include "options.h"

View File

@ -7,13 +7,18 @@
#include "adjuster.h"
#include "colorprovider.h"
#include "curveeditor.h"
#include "curvelistener.h"
#include "curveeditorgroup.h"
#include "guiutils.h"
#include "thresholdadjuster.h"
#include "toolpanel.h"
class Retinex :
class CurveEditor;
class CurveEditorGroup;
class DiagonalCurveEditor;
class FlatCurveEditor;
class Retinex final :
public ToolParamBlock,
public FoldableToolPanel,
public rtengine::RetinexListener,

View File

@ -18,6 +18,8 @@
*/
#include "rgbcurves.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "options.h"
#include "../rtengine/procparams.h"

View File

@ -22,11 +22,13 @@
#include "adjuster.h"
#include "colorprovider.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "curvelistener.h"
#include "toolpanel.h"
class RGBCurves :
class CurveEditorGroup;
class DiagonalCurveEditor;
class RGBCurves final :
public ToolParamBlock,
public FoldableToolPanel,
public CurveListener,

View File

@ -21,6 +21,7 @@
#include "rotate.h"
#include "guiutils.h"
#include "lensgeomlistener.h"
#include "rtimage.h"
#include "../rtengine/procparams.h"

View File

@ -21,10 +21,10 @@
#include <gtkmm.h>
#include "adjuster.h"
#include "lensgeomlistener.h"
#include "toolpanel.h"
class Rotate :
class LensGeomListener;
class Rotate final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -29,6 +29,7 @@
#include "whitebalance.h"
#include "../rtengine/settings.h"
#include "batchqueuepanel.h"
#include "batchqueueentry.h"
#include "editorpanel.h"
#include "filepanel.h"
#include "filmsimulation.h"

View File

@ -22,7 +22,7 @@
#include "toolpanel.h"
class SensorBayer :
class SensorBayer final :
public ToolParamBlock,
public FoldableToolPanel
{

View File

@ -22,7 +22,7 @@
#include "toolpanel.h"
class SensorXTrans :
class SensorXTrans final:
public ToolParamBlock,
public FoldableToolPanel
{

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class ShadowsHighlights :
class ShadowsHighlights final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -28,7 +28,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class SharpenEdge :
class SharpenEdge final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -24,7 +24,7 @@
#include "thresholdadjuster.h"
#include "toolpanel.h"
class Sharpening :
class Sharpening final:
public ToolParamBlock,
public ThresholdAdjusterListener,
public AdjusterListener,

View File

@ -28,7 +28,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class SharpenMicro :
class SharpenMicro final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class SoftLight: public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
class SoftLight final : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
{
private:
Adjuster *strength;

View File

@ -23,6 +23,7 @@
#include "options.h"
#include "rtscalable.h"
#include "thumbbrowserbase.h"
#include "thumbbrowserentrybase.h"
#include "../rtengine/rt_math.h"

View File

@ -24,13 +24,13 @@
#include "guiutils.h"
#include "options.h"
#include "thumbbrowserentrybase.h"
/*
* Class handling the list of ThumbBrowserEntry objects and their position in it's allocated space
*/
class Inspector;
class ThumbBrowserEntryBase;
class ThumbBrowserBase :
public Gtk::Grid

View File

@ -23,6 +23,7 @@
#include <gtkmm.h>
#include "thumbimageupdater.h"
#include "thumbbrowserentrybase.h"
#include "guiutils.h"
#include "threadutils.h"

View File

@ -20,7 +20,6 @@
#include <glib.h>
#include "thumbbrowserentrybase.h"
#include "../rtengine/noncopyable.h"
@ -36,6 +35,9 @@ namespace procparams
}
}
class ThumbBrowserEntryBase;
class ThumbImageUpdateListener
{
public:

View File

@ -23,6 +23,8 @@
#include "tonecurve.h"
#include "adjuster.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "eventmapper.h"
#include "ppversion.h"
#include "options.h"

View File

@ -21,14 +21,16 @@
#include <gtkmm.h>
#include "adjuster.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "curvelistener.h"
#include "guiutils.h"
#include "toolpanel.h"
class CurveEditor;
class CurveEditorGroup;
class DiagonalCurveEditor;
class EditDataProvider;
class ToneCurve :
class ToneCurve final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel,

View File

@ -37,7 +37,7 @@ public:
virtual void editModeSwitchedOff() = 0;
};
class ToolBar : public Gtk::HBox
class ToolBar final : public Gtk::HBox
{
private:
std::unique_ptr<RTImage> handimg;

View File

@ -41,9 +41,6 @@ class ProcParams;
}
}
class FoldableToolPanel;
class ToolPanel;
class ToolPanelListener
{
public:

View File

@ -21,6 +21,7 @@
#include "metadatapanel.h"
#include "options.h"
#include "rtimage.h"
#include "../rtengine/imagesource.h"
#include "../rtengine/dfmanager.h"
#include "../rtengine/ffmanager.h"

View File

@ -18,6 +18,9 @@
*/
#include "vibrance.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "options.h"
#include "../rtengine/color.h"

View File

@ -21,12 +21,14 @@
#include <gtkmm.h>
#include "adjuster.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "curvelistener.h"
#include "thresholdadjuster.h"
#include "toolpanel.h"
class Vibrance :
class CurveEditorGroup;
class DiagonalCurveEditor;
class Vibrance final :
public ToolParamBlock,
public AdjusterListener,
public ThresholdCurveProvider,

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class Vignetting :
class Vignetting final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel

View File

@ -20,6 +20,8 @@
#include "wavelet.h"
#include <cmath>
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "editcallbacks.h"
#include "guiutils.h"
#include "rtimage.h"

View File

@ -22,15 +22,18 @@
#include <gtkmm.h>
#include "adjuster.h"
#include "toolpanel.h"
#include "curveeditor.h"
#include "curveeditorgroup.h"
#include "curvelistener.h"
#include "thresholdadjuster.h"
#include "colorprovider.h"
#include "guiutils.h"
class CurveEditor;
class CurveEditorGroup;
class DiagonalCurveEditor;
class EditDataProvider;
class FlatCurveEditor;
class Wavelet :
class Wavelet final :
public ToolParamBlock,
public ThresholdAdjusterListener,
public AdjusterListener,

View File

@ -35,7 +35,7 @@ public:
virtual void spotWBRequested(int size) = 0;
};
class WhiteBalance : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public rtengine::AutoWBListener
class WhiteBalance final : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public rtengine::AutoWBListener
{
enum WB_LabelType {

View File

@ -25,7 +25,7 @@
#include "guiutils.h"
#include "toolpanel.h"
class XTransProcess :
class XTransProcess final :
public ToolParamBlock,
public AdjusterListener,
public CheckBoxListener,

View File

@ -23,7 +23,7 @@
#include "adjuster.h"
#include "toolpanel.h"
class XTransRAWExposure :
class XTransRAWExposure final :
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel