From 8824646d27f8639c72a3301a24142c8166c05093 Mon Sep 17 00:00:00 2001 From: Kacper Donat Date: Sat, 28 Jun 2025 19:59:28 +0200 Subject: [PATCH] Sketcher: Use generic tool hints table for DrawSketchHandlerLine --- src/Mod/Sketcher/Gui/DrawSketchHandlerLine.h | 125 ++++++++----------- 1 file changed, 51 insertions(+), 74 deletions(-) diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandlerLine.h b/src/Mod/Sketcher/Gui/DrawSketchHandlerLine.h index bcefbdd580..05d0b1f106 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandlerLine.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandlerLine.h @@ -258,21 +258,58 @@ private: std::list getToolHints() const override { - return lookupLineHints(static_cast(constructionMethod()), static_cast(state())); + using State = std::pair; + using enum Gui::InputHint::UserInput; + + const auto switchHint = + Gui::InputHint {.message = QObject::tr("%1 switch mode"), .sequences = {KeyM}}; + + return Gui::lookupHints( + {constructionMethod(), state()}, + { + // OnePointLengthAngle method + {.state = {ConstructionMethod::OnePointLengthAngle, SelectMode::SeekFirst}, + .hints = + { + {QObject::tr("%1 pick first point"), {MouseLeft}}, + switchHint, + }}, + {.state = {ConstructionMethod::OnePointLengthAngle, SelectMode::SeekSecond}, + .hints = + { + {QObject::tr("%1 pick second point"), {MouseLeft}}, + switchHint, + }}, + + // OnePointWidthHeight method + {.state = {ConstructionMethod::OnePointWidthHeight, SelectMode::SeekFirst}, + .hints = + { + {QObject::tr("%1 pick first point"), {MouseLeft}}, + switchHint, + }}, + {.state = {ConstructionMethod::OnePointWidthHeight, SelectMode::SeekSecond}, + .hints = + { + {QObject::tr("%1 pick second point"), {MouseLeft}}, + switchHint, + }}, + + // TwoPoints method + {.state = {ConstructionMethod::TwoPoints, SelectMode::SeekFirst}, + .hints = + { + {QObject::tr("%1 pick first point"), {MouseLeft}}, + switchHint, + }}, + {.state = {ConstructionMethod::TwoPoints, SelectMode::SeekSecond}, + .hints = + { + {QObject::tr("%1 pick second point"), {MouseLeft}}, + switchHint, + }}, + }); } - - struct HintEntry - { - int constructionMethod; - int state; - std::list hints; - }; - - using HintTable = std::vector; - - static Gui::InputHint switchModeHint(); - static HintTable getLineHintTable(); - static std::list lookupLineHints(int method, int state); }; template<> @@ -802,66 +839,6 @@ void DSHLineController::addConstraints() } } -Gui::InputHint DrawSketchHandlerLine::switchModeHint() -{ - return {QObject::tr("%1 switch mode"), {Gui::InputHint::UserInput::KeyM}}; -} - -DrawSketchHandlerLine::HintTable DrawSketchHandlerLine::getLineHintTable() -{ - const auto switchHint = switchModeHint(); - return {// Structure: {constructionMethod, state, {hints...}} - - // OnePointLengthAngle (0) - {0, - 0, - {// SeekFirst - {QObject::tr("%1 pick first point"), {Gui::InputHint::UserInput::MouseLeft}}, - switchHint}}, - {0, - 1, - {// SeekSecond - {QObject::tr("%1 pick second point"), {Gui::InputHint::UserInput::MouseLeft}}, - switchHint}}, - - // OnePointWidthHeight (1) - {1, - 0, - {// SeekFirst - {QObject::tr("%1 pick first point"), {Gui::InputHint::UserInput::MouseLeft}}, - switchHint}}, - {1, - 1, - {// SeekSecond - {QObject::tr("%1 pick second point"), {Gui::InputHint::UserInput::MouseLeft}}, - switchHint}}, - - // TwoPoints (2) - {2, - 0, - {// SeekFirst - {QObject::tr("%1 pick first point"), {Gui::InputHint::UserInput::MouseLeft}}, - switchHint}}, - {2, - 1, - {// SeekSecond - {QObject::tr("%1 pick second point"), {Gui::InputHint::UserInput::MouseLeft}}, - switchHint}}}; -} - -std::list DrawSketchHandlerLine::lookupLineHints(int method, int state) -{ - const auto lineHintTable = getLineHintTable(); - - auto it = std::find_if(lineHintTable.begin(), - lineHintTable.end(), - [method, state](const HintEntry& entry) { - return entry.constructionMethod == method && entry.state == state; - }); - - return (it != lineHintTable.end()) ? it->hints : std::list {}; -} - } // namespace SketcherGui