495 lines
16 KiB
C++
495 lines
16 KiB
C++
/*
|
|
* This file is part of RawTherapee.
|
|
*
|
|
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
|
|
*
|
|
* 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/>.
|
|
*/
|
|
#pragma once
|
|
|
|
#include <set>
|
|
#include <vector>
|
|
#if defined __has_include
|
|
#if __has_include(<gtkmm/enums.h>)
|
|
#include <gtkmm/enums.h>
|
|
#else
|
|
#include <gtkmm-3.0/gtkmm/enums.h>
|
|
#endif
|
|
#else
|
|
#include <gtkmm/enums.h>
|
|
#endif
|
|
#include "../rtengine/settings.h"
|
|
#include <exception>
|
|
|
|
#define STARTUPDIR_CURRENT 0
|
|
#define STARTUPDIR_HOME 1
|
|
#define STARTUPDIR_CUSTOM 2
|
|
#define STARTUPDIR_LAST 3
|
|
|
|
#define THEMEREGEXSTR "^(.+)-GTK3-(\\d{1,2})?_(\\d{1,2})?\\.css$"
|
|
|
|
// Default bundled profile name to use for Raw images
|
|
#ifdef WIN32
|
|
#define DEFPROFILE_RAW "${G}\\Auto-Matched Curve - ISO Low"
|
|
#else
|
|
#define DEFPROFILE_RAW "${G}/Auto-Matched Curve - ISO Low"
|
|
#endif
|
|
// Default bundled profile name to use for Standard images
|
|
#define DEFPROFILE_IMG "Neutral"
|
|
// Profile name to use for internal values' profile
|
|
#define DEFPROFILE_INTERNAL "Neutral"
|
|
// Special name for the Dynamic profile
|
|
#define DEFPROFILE_DYNAMIC "Dynamic"
|
|
|
|
struct SaveFormat {
|
|
SaveFormat(
|
|
const Glib::ustring& _format,
|
|
int _png_bits,
|
|
int _jpeg_quality,
|
|
int _jpeg_sub_samp,
|
|
int _tiff_bits,
|
|
bool _tiff_float,
|
|
bool _tiff_uncompressed,
|
|
bool _save_params
|
|
) :
|
|
format(_format),
|
|
pngBits(_png_bits),
|
|
jpegQuality(_jpeg_quality),
|
|
jpegSubSamp(_jpeg_sub_samp),
|
|
tiffBits(_tiff_bits),
|
|
tiffFloat(_tiff_float),
|
|
tiffUncompressed(_tiff_uncompressed),
|
|
saveParams(_save_params)
|
|
{
|
|
}
|
|
SaveFormat(
|
|
const Glib::ustring& _format,
|
|
int _png_bits,
|
|
int _tiff_bits,
|
|
bool _tiff_float
|
|
) :
|
|
SaveFormat(
|
|
_format,
|
|
_png_bits,
|
|
90,
|
|
2,
|
|
_tiff_bits,
|
|
_tiff_float,
|
|
true,
|
|
true
|
|
)
|
|
{
|
|
}
|
|
SaveFormat() :
|
|
SaveFormat("jpg", 8, 8, false)
|
|
{
|
|
}
|
|
|
|
Glib::ustring format;
|
|
int pngBits;
|
|
int jpegQuality;
|
|
int jpegSubSamp; // 1=best compression, 3=best quality
|
|
int tiffBits;
|
|
bool tiffFloat;
|
|
bool tiffUncompressed;
|
|
bool saveParams;
|
|
};
|
|
|
|
enum ThFileType {FT_Invalid = -1, FT_None = 0, FT_Raw = 1, FT_Jpeg = 2, FT_Tiff = 3, FT_Png = 4, FT_Custom = 5, FT_Tiff16 = 6, FT_Png16 = 7, FT_Custom16 = 8};
|
|
enum PPLoadLocation {PLL_Cache = 0, PLL_Input = 1};
|
|
enum CPBKeyType {CPBKT_TID = 0, CPBKT_NAME = 1, CPBKT_TID_NAME = 2};
|
|
enum prevdemo_t {PD_Sidecar = 1, PD_Fast = 0};
|
|
|
|
namespace Glib
|
|
{
|
|
|
|
class KeyFile;
|
|
|
|
}
|
|
|
|
class Options
|
|
{
|
|
public:
|
|
class Error: public std::exception
|
|
{
|
|
public:
|
|
explicit Error (const Glib::ustring &msg): msg_ (msg) {}
|
|
const char *what() const throw() override
|
|
{
|
|
return msg_.c_str();
|
|
}
|
|
const Glib::ustring &get_msg() const throw()
|
|
{
|
|
return msg_;
|
|
}
|
|
|
|
private:
|
|
Glib::ustring msg_;
|
|
};
|
|
|
|
private:
|
|
enum class DefProfError : short {
|
|
defProfRawMissing = 1 << 0,
|
|
bundledDefProfRawMissing = 1 << 1,
|
|
defProfImgMissing = 1 << 2,
|
|
bundledDefProfImgMissing = 1 << 3
|
|
};
|
|
short defProfError;
|
|
Glib::ustring userProfilePath;
|
|
Glib::ustring globalProfilePath;
|
|
bool checkProfilePath (Glib::ustring &path);
|
|
bool checkDirPath (Glib::ustring &path, Glib::ustring errString);
|
|
void updatePaths();
|
|
int getString (const char* src, char* dst);
|
|
void error (int line);
|
|
/**
|
|
* Safely reads a directory from the configuration file and only applies it
|
|
* to the provided destination variable if there is a non-empty string in
|
|
* the configuration.
|
|
*
|
|
* @param keyFile file to read configuration from
|
|
* @param section name of the section in the configuration file
|
|
* @param entryName name of the entry in the configuration file
|
|
* @param destination destination variable to store to
|
|
* @return @c true if @p destination was changed
|
|
*/
|
|
bool safeDirGet (const Glib::KeyFile& keyFile, const Glib::ustring& section,
|
|
const Glib::ustring& entryName, Glib::ustring& destination);
|
|
|
|
public:
|
|
enum class NavigatorUnit {
|
|
PERCENT,
|
|
R0_255,
|
|
R0_1,
|
|
_COUNT
|
|
};
|
|
|
|
enum class ScopeType {
|
|
NONE = -1,
|
|
HISTOGRAM,
|
|
HISTOGRAM_RAW,
|
|
PARADE,
|
|
VECTORSCOPE_HC,
|
|
VECTORSCOPE_HS,
|
|
WAVEFORM
|
|
};
|
|
|
|
bool savesParamsAtExit;
|
|
SaveFormat saveFormat, saveFormatBatch;
|
|
Glib::ustring savePathTemplate;
|
|
Glib::ustring savePathFolder;
|
|
bool saveUsePathTemplate;
|
|
Glib::ustring defProfRaw;
|
|
Glib::ustring defProfImg;
|
|
Glib::ustring dateFormat;
|
|
int adjusterMinDelay;
|
|
int adjusterMaxDelay;
|
|
int startupDir;
|
|
Gtk::SortType dirBrowserSortType;
|
|
Glib::ustring startupPath;
|
|
Glib::ustring profilePath; // can be an absolute or relative path; depending on this value, bundled profiles may not be found
|
|
bool useBundledProfiles; // only used if multiUser == true
|
|
Glib::ustring lastCopyMovePath;
|
|
Glib::ustring loadSaveProfilePath;
|
|
Glib::ustring lastSaveAsPath;
|
|
int saveAsDialogWidth;
|
|
int saveAsDialogHeight;
|
|
int toolPanelWidth;
|
|
int browserToolPanelWidth;
|
|
int browserToolPanelHeight;
|
|
bool browserToolPanelOpened;
|
|
bool browserDirPanelOpened;
|
|
bool editorFilmStripOpened;
|
|
int historyPanelWidth;
|
|
int windowX;
|
|
int windowY;
|
|
int windowWidth;
|
|
int windowHeight;
|
|
bool windowMaximized;
|
|
int windowMonitor;
|
|
int meowMonitor;
|
|
bool meowFullScreen;
|
|
bool meowMaximized;
|
|
int meowWidth;
|
|
int meowHeight;
|
|
int meowX;
|
|
int meowY;
|
|
int detailWindowWidth;
|
|
int detailWindowHeight;
|
|
int dirBrowserWidth;
|
|
int dirBrowserHeight;
|
|
int preferencesWidth;
|
|
int preferencesHeight;
|
|
bool lastShowAllExif;
|
|
int lastScale;
|
|
int panAccelFactor;
|
|
int lastCropSize;
|
|
Glib::ustring fontFamily; // RT's main font family
|
|
int fontSize; // RT's main font size (units: pt)
|
|
Glib::ustring CPFontFamily; // ColorPicker font family
|
|
int CPFontSize; // ColorPicker font size (units: pt)
|
|
bool pseudoHiDPISupport;
|
|
bool fbOnlyRaw;
|
|
bool fbShowDateTime;
|
|
bool fbShowBasicExif;
|
|
bool fbShowExpComp;
|
|
bool fbShowHidden;
|
|
int fbArrangement;
|
|
NavigatorUnit navRGBUnit;
|
|
NavigatorUnit navHSVUnit;
|
|
bool multiUser;
|
|
static Glib::ustring rtdir;
|
|
Glib::ustring version;
|
|
int thumbSize, thumbSizeTab, thumbSizeQueue;
|
|
bool sameThumbSize; // Will use only one thumb size for the file browser and the single editor tab, and avoid recomputing them
|
|
bool showHistory;
|
|
int showFilePanelState; // 0: normal, 1: maximized, 2: normal, 3: hidden
|
|
bool showInfo;
|
|
bool mainNBVertical; // main notebook vertical tabs?
|
|
bool showClippedHighlights;
|
|
bool showClippedShadows;
|
|
int highlightThreshold;
|
|
int shadowThreshold;
|
|
bool blinkClipped;
|
|
int bgcolor;
|
|
Glib::ustring language;
|
|
bool languageAutoDetect;
|
|
Glib::ustring theme;
|
|
static Glib::ustring cacheBaseDir;
|
|
bool autoSuffix;
|
|
bool forceFormatOpts;
|
|
int saveMethodNum;
|
|
bool saveParamsFile;
|
|
bool saveParamsCache;
|
|
PPLoadLocation paramsLoadLocation;
|
|
bool procQueueEnabled;
|
|
Glib::ustring gimpDir;
|
|
Glib::ustring psDir;
|
|
Glib::ustring customEditorProg;
|
|
Glib::ustring CPBPath; // Custom Profile Builder's path
|
|
CPBKeyType CPBKeys; // Custom Profile Builder's key type
|
|
int editorToSendTo;
|
|
enum EditorOutDir {
|
|
EDITOR_OUT_DIR_TEMP,
|
|
EDITOR_OUT_DIR_CURRENT,
|
|
EDITOR_OUT_DIR_CUSTOM
|
|
};
|
|
EditorOutDir editor_out_dir; // output directory for "open in external editor"
|
|
Glib::ustring editor_custom_out_dir;
|
|
bool editor_float32;
|
|
bool editor_bypass_output_profile;
|
|
|
|
int maxThumbnailHeight;
|
|
int maxThumbnailWidth;
|
|
std::size_t maxCacheEntries;
|
|
int thumbInterp; // 0: nearest, 1: bilinear
|
|
std::vector<Glib::ustring> parseExtensions; // List containing all extensions type
|
|
std::vector<int> parseExtensionsEnabled; // List of bool to retain extension or not
|
|
std::vector<Glib::ustring> parsedExtensions; // List containing all retained extensions (lowercase)
|
|
std::set<std::string> parsedExtensionsSet; // Set containing all retained extensions (lowercase)
|
|
std::vector<int> tpOpen;
|
|
bool autoSaveTpOpen;
|
|
//std::vector<int> crvOpen;
|
|
std::vector<int> baBehav;
|
|
rtengine::Settings rtSettings;
|
|
bool showtooltip;
|
|
std::vector<Glib::ustring> favoriteDirs;
|
|
std::vector<Glib::ustring> renameTemplates;
|
|
bool renameUseTemplates;
|
|
bool internalThumbIfUntouched;
|
|
bool overwriteOutputFile;
|
|
int complexity;
|
|
bool inspectorWindow; // open inspector in spearate window
|
|
bool zoomOnScroll; // translate scroll events to zoom
|
|
|
|
std::vector<double> thumbnailZoomRatios;
|
|
bool overlayedFileNames;
|
|
bool filmStripOverlayedFileNames;
|
|
bool showFileNames;
|
|
bool filmStripShowFileNames;
|
|
bool tabbedUI;
|
|
bool rememberZoomAndPan;
|
|
int multiDisplayMode; // 0=none, 1=Edit panels on other display
|
|
std::vector<double> cutOverlayBrush; // Red;Green;Blue;Alpha , all ranging 0..1
|
|
std::vector<double> navGuideBrush; // Red;Green;Blue;Alpha , all ranging 0..1
|
|
|
|
Glib::ustring sndBatchQueueDone;
|
|
Glib::ustring sndLngEditProcDone;
|
|
double sndLngEditProcDoneSecs; // Minimum processing time seconds till the sound is played
|
|
bool sndEnable;
|
|
|
|
int histogramPosition; // 0=disabled, 1=left pane, 2=right pane
|
|
bool histogramRed, histogramGreen, histogramBlue;
|
|
bool histogramLuma, histogramChroma;
|
|
bool histogramBar;
|
|
int histogramHeight;
|
|
int histogramDrawMode;
|
|
ScopeType histogramScopeType;
|
|
bool histogramShowOptionButtons;
|
|
float histogramTraceBrightness;
|
|
bool FileBrowserToolbarSingleRow;
|
|
bool hideTPVScrollbar;
|
|
int whiteBalanceSpotSize;
|
|
int curvebboxpos; // 0=above, 1=right, 2=below, 3=left
|
|
|
|
bool showFilmStripToolBar;
|
|
|
|
// cropping options
|
|
int cropPPI;
|
|
enum CropGuidesMode { CROP_GUIDE_NONE, CROP_GUIDE_FRAME, CROP_GUIDE_FULL };
|
|
CropGuidesMode cropGuides;
|
|
bool cropAutoFit;
|
|
|
|
// Performance options
|
|
Glib::ustring clutsDir;
|
|
int rgbDenoiseThreadLimit; // maximum number of threads for the denoising tool ; 0 = use the maximum available
|
|
int maxInspectorBuffers; // maximum number of buffers (i.e. images) for the Inspector feature
|
|
int inspectorDelay;
|
|
int clutCacheSize;
|
|
bool filledProfile; // Used as reminder for the ProfilePanel "mode"
|
|
prevdemo_t prevdemo; // Demosaicing method used for the <100% preview
|
|
bool serializeTiffRead;
|
|
bool measure;
|
|
size_t chunkSizeAMAZE;
|
|
size_t chunkSizeCA;
|
|
size_t chunkSizeRCD;
|
|
size_t chunkSizeRGB;
|
|
size_t chunkSizeXT;
|
|
bool menuGroupRank;
|
|
bool menuGroupLabel;
|
|
bool menuGroupFileOperations;
|
|
bool menuGroupProfileOperations;
|
|
bool menuGroupExtProg;
|
|
|
|
// ICC Profile Creator
|
|
Glib::ustring ICCPC_primariesPreset;
|
|
double ICCPC_redPrimaryX;
|
|
double ICCPC_redPrimaryY;
|
|
double ICCPC_greenPrimaryX;
|
|
double ICCPC_greenPrimaryY;
|
|
double ICCPC_bluePrimaryX;
|
|
double ICCPC_bluePrimaryY;
|
|
Glib::ustring ICCPC_gammaPreset;
|
|
double ICCPC_gamma;
|
|
double ICCPC_slope;
|
|
Glib::ustring ICCPC_profileVersion;
|
|
Glib::ustring ICCPC_illuminant;
|
|
Glib::ustring ICCPC_description;
|
|
Glib::ustring ICCPC_copyright;
|
|
bool ICCPC_appendParamsToDesc;
|
|
|
|
// fast export options
|
|
bool fastexport_bypass_sharpening;
|
|
bool fastexport_bypass_sharpenEdge;
|
|
bool fastexport_bypass_sharpenMicro;
|
|
//bool fastexport_bypass_lumaDenoise;
|
|
//bool fastexport_bypass_colorDenoise;
|
|
bool fastexport_bypass_defringe;
|
|
bool fastexport_bypass_dirpyrDenoise;
|
|
bool fastexport_bypass_dirpyrequalizer;
|
|
bool fastexport_bypass_wavelet;
|
|
Glib::ustring fastexport_raw_bayer_method;
|
|
//bool fastexport_bypass_raw_bayer_all_enhance;
|
|
bool fastexport_bypass_raw_bayer_dcb_iterations;
|
|
bool fastexport_bypass_raw_bayer_dcb_enhance;
|
|
bool fastexport_bypass_raw_bayer_lmmse_iterations;
|
|
bool fastexport_bypass_raw_bayer_linenoise;
|
|
bool fastexport_bypass_raw_bayer_greenthresh;
|
|
Glib::ustring fastexport_raw_xtrans_method;
|
|
bool fastexport_bypass_raw_ccSteps;
|
|
bool fastexport_bypass_raw_ca;
|
|
bool fastexport_bypass_raw_df;
|
|
bool fastexport_bypass_raw_ff;
|
|
Glib::ustring fastexport_icm_input_profile;
|
|
Glib::ustring fastexport_icm_working_profile;
|
|
Glib::ustring fastexport_icm_output_profile;
|
|
int fastexport_icm_outputIntent;
|
|
bool fastexport_icm_outputBPC;
|
|
Glib::ustring fastexport_icm_custom_output_profile;
|
|
bool fastexport_resize_enabled;
|
|
double fastexport_resize_scale;
|
|
Glib::ustring fastexport_resize_appliesTo;
|
|
Glib::ustring fastexport_resize_method;
|
|
int fastexport_resize_dataspec;
|
|
int fastexport_resize_width;
|
|
int fastexport_resize_height;
|
|
int fastexport_resize_longedge;
|
|
int fastexport_resize_shortedge;
|
|
bool fastexport_use_fast_pipeline;
|
|
|
|
std::vector<Glib::ustring> favorites;
|
|
// Dialog settings
|
|
Glib::ustring lastIccDir;
|
|
Glib::ustring lastDarkframeDir;
|
|
Glib::ustring lastFlatfieldDir;
|
|
Glib::ustring lastRgbCurvesDir;
|
|
Glib::ustring lastLabCurvesDir;
|
|
Glib::ustring lastRetinexDir;
|
|
Glib::ustring lastDenoiseCurvesDir;
|
|
Glib::ustring lastWaveletCurvesDir;
|
|
Glib::ustring lastlocalCurvesDir;
|
|
Glib::ustring lastPFCurvesDir;
|
|
Glib::ustring lastHsvCurvesDir;
|
|
Glib::ustring lastToneCurvesDir;
|
|
Glib::ustring lastColorToningCurvesDir;
|
|
Glib::ustring lastVibranceCurvesDir;
|
|
Glib::ustring lastProfilingReferenceDir;
|
|
Glib::ustring lastBWCurvesDir;
|
|
Glib::ustring lastLensProfileDir;
|
|
Glib::ustring lastICCProfCreatorDir;
|
|
bool gimpPluginShowInfoDialog;
|
|
|
|
size_t maxRecentFolders; // max. number of recent folders stored in options file
|
|
std::vector<Glib::ustring> recentFolders; // List containing all recent folders
|
|
|
|
|
|
Options ();
|
|
|
|
Options* copyFrom (Options* other);
|
|
void filterOutParsedExtensions ();
|
|
void setDefaults ();
|
|
void readFromFile (Glib::ustring fname);
|
|
void saveToFile (Glib::ustring fname);
|
|
static void load (bool lightweight = false);
|
|
static void save();
|
|
|
|
// if multiUser=false, send back the global profile path
|
|
Glib::ustring getPreferredProfilePath();
|
|
Glib::ustring getUserProfilePath();
|
|
Glib::ustring getGlobalProfilePath();
|
|
Glib::ustring findProfilePath (Glib::ustring &profName);
|
|
bool is_parse_extention (Glib::ustring fname);
|
|
bool has_retained_extention (const Glib::ustring& fname);
|
|
bool is_new_version();
|
|
bool is_extention_enabled (const Glib::ustring& ext);
|
|
bool is_defProfRawMissing();
|
|
bool is_bundledDefProfRawMissing();
|
|
bool is_defProfImgMissing();
|
|
bool is_bundledDefProfImgMissing();
|
|
void setDefProfRawMissing (bool value);
|
|
void setBundledDefProfRawMissing (bool value);
|
|
void setDefProfImgMissing (bool value);
|
|
void setBundledDefProfImgMissing (bool value);
|
|
static Glib::ustring getICCProfileCopyright();
|
|
};
|
|
|
|
extern Options options;
|
|
extern Glib::ustring argv0;
|
|
extern Glib::ustring argv1;
|
|
extern bool simpleEditor;
|
|
extern bool gimpPlugin;
|
|
extern bool remote;
|
|
extern Glib::ustring versionString;
|
|
extern Glib::ustring paramFileExtension;
|