Merge with "Beep6581/dev"

This commit is contained in:
Pandagrapher
2023-03-11 11:02:29 +01:00
252 changed files with 9021 additions and 3231 deletions

View File

@@ -18,6 +18,7 @@
*/
#pragma once
#include <unordered_set>
#include <vector>
#include <gtkmm.h>
@@ -169,11 +170,13 @@ protected:
FilmNegative* filmNegative;
PdSharpening* pdSharpening;
std::vector<PParamsChangeListener*> paramcListeners;
std::unordered_map<Gtk::Widget *, FoldableToolPanel *>
expanderToToolPanelMap;
rtengine::StagedImageProcessor* ipc;
std::vector<ToolPanel*> toolPanels;
std::vector<FoldableToolPanel*> favorites;
std::vector<FoldableToolPanel*> favoritesToolPanels;
ToolVBox* favoritePanel;
ToolVBox* exposurePanel;
ToolVBox* detailsPanel;
@@ -184,7 +187,7 @@ protected:
ToolVBox* locallabPanel;
ToolBar* toolBar;
TextOrIcon* toiF;
std::unique_ptr<TextOrIcon> toiF;
TextOrIcon* toiE;
TextOrIcon* toiD;
TextOrIcon* toiC;
@@ -197,7 +200,7 @@ protected:
Gtk::Image* imgPanelEnd[8];
Gtk::Box* vbPanelEnd[8];
Gtk::ScrolledWindow* favoritePanelSW;
std::unique_ptr<Gtk::ScrolledWindow> favoritePanelSW;
Gtk::ScrolledWindow* exposurePanelSW;
Gtk::ScrolledWindow* detailsPanelSW;
Gtk::ScrolledWindow* colorPanelSW;
@@ -209,12 +212,17 @@ protected:
std::vector<MyExpander*> expList;
bool hasChanged;
bool batch;
void addPanel(Gtk::Box* where, FoldableToolPanel* panel, int level = 1);
void foldThemAll(GdkEventButton* event);
void updateVScrollbars(bool hide);
void addfavoritePanel (Gtk::Box* where, FoldableToolPanel* panel, int level = 1);
void notebookPageChanged(Gtk::Widget* page, guint page_num);
void updatePanelTools(
Gtk::Widget *page,
const std::vector<Glib::ustring> &favorites,
bool cloneFavoriteTools);
private:
EditDataProvider *editDataProvider;
@@ -224,12 +232,107 @@ private:
Gtk::Widget* prevPage;
public:
enum class Panel {
FAVORITE,
EXPOSURE,
DETAILS,
COLOR,
ADVANCED,
LOCALLAB,
TRANSFORM_PANEL,
RAW,
};
enum class Tool {
TONE_CURVE,
SHADOWS_HIGHLIGHTS,
IMPULSE_DENOISE,
DEFRINGE_TOOL,
SPOT,
DIR_PYR_DENOISE,
EPD,
SHARPENING_TOOL,
LOCAL_CONTRAST,
SHARPEN_EDGE,
SHARPEN_MICRO,
L_CURVE,
RGB_CURVES,
COLOR_TONING,
LENS_GEOM,
LENS_PROF,
DISTORTION,
ROTATE,
VIBRANCE,
COLOR_APPEARANCE,
WHITE_BALANCE,
VIGNETTING,
RETINEX_TOOL,
GRADIENT,
LOCALLAB,
PC_VIGNETTE,
PERSPECTIVE,
CA_CORRECTION,
CH_MIXER,
BLACK_WHITE,
RESIZE_TOOL,
PR_SHARPENING,
CROP_TOOL,
ICM,
WAVELET,
DIR_PYR_EQUALIZER,
HSV_EQUALIZER,
FILM_SIMULATION,
SOFT_LIGHT,
DEHAZE,
SENSOR_BAYER,
SENSOR_XTRANS,
BAYER_PROCESS,
XTRANS_PROCESS,
BAYER_PREPROCESS,
PREPROCESS,
DARKFRAME_TOOL,
FLATFIELD_TOOL,
RAW_CA_CORRECTION,
RAW_EXPOSURE,
PREPROCESS_WB,
BAYER_RAW_EXPOSURE,
XTRANS_RAW_EXPOSURE,
FATTAL,
FILM_NEGATIVE,
PD_SHARPENING,
};
struct ToolTree {
Tool id;
std::vector<ToolTree> children;
};
using ToolLayout = std::unordered_map<Panel, const std::vector<ToolTree> &, ScopedEnumHash>;
CoarsePanel* coarse;
Gtk::Notebook* toolPanelNotebook;
ToolPanelCoordinator(bool batch = false);
~ToolPanelCoordinator () override;
static const ToolLayout &getDefaultToolLayout();
/**
* Gets the tool with the provided tool name.
*
* @param name The tool name as a raw string.
* @return The tool.
* @throws std::out_of_range If the name is not recognized.
*/
static Tool getToolFromName(const std::string &name);
/**
* Gets the tool name for the tool's ToolPanel as a string.
*
* @param tool The name as a raw string, or an empty string if the tool is
* unknown.
*/
static std::string getToolName(Tool tool);
static bool isFavoritable(Tool tool);
bool getChangedState()
{
return hasChanged;
@@ -247,6 +350,8 @@ public:
const LUTu& histLRETI
);
void foldAllButOne(Gtk::Box* parent, FoldableToolPanel* openedSection);
void updateToolLocations(
const std::vector<Glib::ustring> &favorites, bool cloneFavoriteTools);
// multiple listeners can be added that are notified on changes (typical: profile panel and the history)
void addPParamsChangeListener(PParamsChangeListener* pp)
@@ -261,7 +366,7 @@ public:
void unsetTweakOperator (rtengine::TweakOperator *tOperator) override;
// FilmNegProvider interface
void imageTypeChanged (bool isRaw, bool isBayer, bool isXtrans, bool isMono = false) override;
void imageTypeChanged (bool isRaw, bool isBayer, bool isXtrans, bool isMono = false, bool isGainMapSupported = false) override;
// profilechangelistener interface
void profileChange(
@@ -354,6 +459,25 @@ public:
void setEditProvider(EditDataProvider *provider);
protected:
static std::unordered_map<std::string, Tool> toolNamesReverseMap;
std::unordered_map<Tool, const ToolTree *, ScopedEnumHash>
toolToDefaultToolTreeMap;
FoldableToolPanel *getFoldableToolPanel(Tool tool) const;
FoldableToolPanel *getFoldableToolPanel(const ToolTree &tool) const;
void updateFavoritesPanel(
const std::vector<Glib::ustring> &favorites, bool cloneFavoriteTools);
template <typename T>
typename std::enable_if<std::is_convertible<T, const ToolTree>::value, void>::type
updateToolPanel(
Gtk::Box *panelBox,
const std::vector<T> &children,
int level,
const std::unordered_set<Tool, ScopedEnumHash> &favorites,
bool cloneFavoriteTools);
private:
IdleRegister idle_register;
};