Make control lines buttons react to line counts
Set the "apply" and "delete all" button sensitivity based on the number of control lines. Add extra tooltip text to the apply button when editing and there is not enough lines. The text explains there must be enough vertical or horizontal control lines.
This commit is contained in:
parent
ef49d9eefd
commit
2c1e6a8ca1
@ -3320,6 +3320,7 @@ TP_PCVIGNETTE_ROUNDNESS_TOOLTIP;Roundness:\n0 = rectangle,\n50 = fitted ellipse,
|
||||
TP_PCVIGNETTE_STRENGTH;Strength
|
||||
TP_PCVIGNETTE_STRENGTH_TOOLTIP;Filter strength in stops (reached in corners).
|
||||
TP_PDSHARPENING_LABEL;Capture Sharpening
|
||||
TP_PERSPECTIVE_CONTROL_LINE_APPLY_INVALID_TOOLTIP;At least two horizontal or two vertical control lines required.
|
||||
TP_PERSPECTIVE_CAMERA_CROP_FACTOR;Crop factor
|
||||
TP_PERSPECTIVE_CAMERA_FOCAL_LENGTH;Focal length
|
||||
TP_PERSPECTIVE_CAMERA_FRAME;Correction
|
||||
|
@ -36,6 +36,7 @@ ControlLineManager::ControlLineManager():
|
||||
draw_mode(false),
|
||||
drawing_line(false),
|
||||
edited(false),
|
||||
horizontalCount(0), verticalCount(0),
|
||||
prev_obj(-1),
|
||||
selected_object(-1)
|
||||
{
|
||||
@ -84,6 +85,16 @@ size_t ControlLineManager::size(void) const
|
||||
return control_lines.size();
|
||||
}
|
||||
|
||||
size_t ControlLineManager::getHorizontalCount(void) const
|
||||
{
|
||||
return horizontalCount;
|
||||
}
|
||||
|
||||
size_t ControlLineManager::getVerticalCount(void) const
|
||||
{
|
||||
return verticalCount;
|
||||
}
|
||||
|
||||
bool ControlLineManager::button1Pressed(int modifierKey)
|
||||
{
|
||||
EditDataProvider* dataProvider = getEditProvider();
|
||||
@ -164,9 +175,13 @@ bool ControlLineManager::pick1(bool picked)
|
||||
if (line.type == rtengine::ControlLine::HORIZONTAL) {
|
||||
line.icon = line.icon_v;
|
||||
line.type = rtengine::ControlLine::VERTICAL;
|
||||
horizontalCount--;
|
||||
verticalCount++;
|
||||
} else if (line.type == rtengine::ControlLine::VERTICAL) {
|
||||
line.icon = line.icon_h;
|
||||
line.type = rtengine::ControlLine::HORIZONTAL;
|
||||
horizontalCount++;
|
||||
verticalCount--;
|
||||
}
|
||||
|
||||
visibleGeometry[object_id - 1] = line.icon.get();
|
||||
@ -405,6 +420,11 @@ void ControlLineManager::addLine(Coord begin, Coord end,
|
||||
EditSubscriber::mouseOverGeometry.push_back(control_line->end.get());
|
||||
|
||||
control_lines.push_back(std::move(control_line));
|
||||
if (type == rtengine::ControlLine::HORIZONTAL) {
|
||||
horizontalCount++;
|
||||
} else {
|
||||
verticalCount++;
|
||||
}
|
||||
}
|
||||
|
||||
void ControlLineManager::autoSetLineType(int object_id)
|
||||
@ -437,6 +457,13 @@ void ControlLineManager::autoSetLineType(int object_id)
|
||||
if (type != line.type) { // Need to update line type.
|
||||
line.type = type;
|
||||
line.icon = icon;
|
||||
if (type == rtengine::ControlLine::HORIZONTAL) {
|
||||
horizontalCount++;
|
||||
verticalCount--;
|
||||
} else {
|
||||
horizontalCount--;
|
||||
verticalCount++;
|
||||
}
|
||||
visibleGeometry[line_id * ::ControlLine::OBJ_COUNT + 1] =
|
||||
line.icon.get();
|
||||
}
|
||||
@ -448,6 +475,7 @@ void ControlLineManager::removeAll(void)
|
||||
mouseOverGeometry.erase(mouseOverGeometry.begin() + 1,
|
||||
mouseOverGeometry.end());
|
||||
control_lines.clear();
|
||||
horizontalCount = verticalCount = 0;
|
||||
prev_obj = -1;
|
||||
selected_object = -1;
|
||||
edited = true;
|
||||
@ -470,6 +498,11 @@ void ControlLineManager::removeLine(size_t line_id)
|
||||
mouseOverGeometry.begin() + ::ControlLine::OBJ_COUNT * line_id
|
||||
+ ::ControlLine::OBJ_COUNT + 1
|
||||
);
|
||||
if (control_lines[line_id]->type == rtengine::ControlLine::HORIZONTAL) {
|
||||
horizontalCount--;
|
||||
} else {
|
||||
verticalCount--;
|
||||
}
|
||||
control_lines.erase(control_lines.begin() + line_id);
|
||||
|
||||
edited = true;
|
||||
|
@ -52,6 +52,7 @@ protected:
|
||||
bool draw_mode;
|
||||
bool drawing_line;
|
||||
bool edited;
|
||||
size_t horizontalCount, verticalCount;
|
||||
Cairo::RefPtr<RTSurface> line_icon_h, line_icon_v;
|
||||
Cairo::RefPtr<RTSurface> line_icon_h_prelight, line_icon_v_prelight;
|
||||
int prev_obj;
|
||||
@ -87,6 +88,10 @@ public:
|
||||
~ControlLineManager();
|
||||
|
||||
bool getEdited(void) const;
|
||||
/** Returns the number of horizontal control lines. */
|
||||
size_t getHorizontalCount(void) const;
|
||||
/** Returns the number of vertical control lines. */
|
||||
size_t getVerticalCount(void) const;
|
||||
void removeAll(void);
|
||||
/** Sets whether or not the lines are visible and interact-able. */
|
||||
void setActive(bool active);
|
||||
|
@ -351,6 +351,8 @@ void PerspCorrection::read (const ProcParams* pp, const ParamsEdited* pedited)
|
||||
method->set_active (1);
|
||||
}
|
||||
|
||||
updateApplyDeleteButtons();
|
||||
|
||||
enableListener ();
|
||||
}
|
||||
|
||||
@ -739,11 +741,29 @@ void PerspCorrection::setEditProvider(EditDataProvider* provider)
|
||||
|
||||
void PerspCorrection::lineChanged(void)
|
||||
{
|
||||
updateApplyDeleteButtons();
|
||||
|
||||
if (listener) {
|
||||
listener->panelChanged(EvPerspControlLines, M("HISTORY_CHANGED"));
|
||||
}
|
||||
}
|
||||
|
||||
void PerspCorrection::updateApplyDeleteButtons(void)
|
||||
{
|
||||
if (batchMode) {
|
||||
return;
|
||||
}
|
||||
|
||||
bool edit_mode = lines_button_edit->get_active();
|
||||
bool enough_lines = lines->getHorizontalCount() >= 2 || lines->getVerticalCount() >= 2;
|
||||
const auto &tooltip = M("GENERAL_APPLY")
|
||||
+ ((edit_mode && !enough_lines) ? "\n\n" + M("TP_PERSPECTIVE_CONTROL_LINE_APPLY_INVALID_TOOLTIP") : "");
|
||||
|
||||
lines_button_apply->set_sensitive(edit_mode && enough_lines);
|
||||
lines_button_apply->set_tooltip_text(tooltip);
|
||||
lines_button_erase->set_sensitive(edit_mode && lines->size() > 0);
|
||||
}
|
||||
|
||||
void PerspCorrection::linesApplyButtonPressed(void)
|
||||
{
|
||||
if (method->get_active_row_number() == 1) {
|
||||
@ -784,6 +804,7 @@ void PerspCorrection::linesEditButtonPressed(void)
|
||||
panel_listener->controlLineEditModeChanged(false);
|
||||
}
|
||||
}
|
||||
updateApplyDeleteButtons();
|
||||
}
|
||||
|
||||
void PerspCorrection::linesEraseButtonPressed(void)
|
||||
@ -795,6 +816,8 @@ void PerspCorrection::requestApplyControlLines(void)
|
||||
{
|
||||
if (lines_button_apply->is_sensitive()) {
|
||||
linesApplyButtonPressed();
|
||||
} else if (lines_button_edit->get_active()) {
|
||||
lines_button_edit->set_active(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -96,6 +96,7 @@ protected:
|
||||
void tweakParams(rtengine::procparams::ProcParams &pparams) override;
|
||||
void setCamBasedEventsActive (bool active = true);
|
||||
void setFocalLengthValue (const rtengine::procparams::ProcParams* pparams, const rtengine::FramesMetaData* metadata);
|
||||
void updateApplyDeleteButtons(void);
|
||||
|
||||
public:
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user