diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index aa48ac67e..17fbe6608 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -40,6 +40,7 @@ #include "../vmisc/vsettings.h" #include "../vmisc/def.h" #include "../vmisc/qxtcsvmodel.h" +#include "../vmisc/vmodifierkey.h" #include "undocommands/renamepp.h" #include "core/vtooloptionspropertybrowser.h" #include "options.h" @@ -113,10 +114,6 @@ namespace { Q_GLOBAL_STATIC_WITH_ARGS(const QString, autosavePrefix, (QLatin1String(".autosave"))) -// String below need for getting translation for key Ctrl -Q_GLOBAL_STATIC_WITH_ARGS(const QString, strQShortcut, (QLatin1String("QShortcut"))) // Context -Q_GLOBAL_STATIC_WITH_ARGS(const QString, strCtrl, (QLatin1String("Ctrl"))) // String - //--------------------------------------------------------------------------------------------------------------------- QVector SortDetailsForLayout(const QHash *allDetails, const QString &nameRegex = QString()) @@ -1021,7 +1018,8 @@ void MainWindow::ToolPiecePath(bool checked) { ToolSelectAllDrawObjects(); SetToolButton(checked, Tool::PiecePath, QStringLiteral("://cursor/path_cursor.png"), - tr("Select path objects, Shift - reverse direction curve"), + tr("Select path objects, %1 - reverse direction curve") + .arg(VModifierKey::Shift()), &MainWindow::ClosedDialogPiecePath); } @@ -1136,8 +1134,8 @@ void MainWindow::ToolGroup(bool checked) { ToolSelectGroupObjects(); const QString tooltip = tr("Select one or more objects, hold %1 - for multiple selection, " - "Enter - finish creation") - .arg(QCoreApplication::translate(strQShortcut->toUtf8().constData(), strCtrl->toUtf8().constData())); + "%2 - finish creation") + .arg(VModifierKey::Control(), VModifierKey::EnterKey()); SetToolButton(checked, Tool::Group, QStringLiteral(":/cursor/group_plus_cursor.png"), tooltip, &MainWindow::ClosedDialogGroup); } @@ -1147,8 +1145,8 @@ void MainWindow::ToolRotation(bool checked) { ToolSelectOperationObjects(); const QString tooltip = tr("Select one or more objects, hold %1 - for multiple selection, " - "Enter - confirm selection") - .arg(QCoreApplication::translate(strQShortcut->toUtf8().constData(), strCtrl->toUtf8().constData())); + "%2 - confirm selection") + .arg(VModifierKey::Control(), VModifierKey::EnterKey()); SetToolButtonWithApply(checked, Tool::Rotation, QStringLiteral(":/cursor/rotation_cursor.png"), tooltip, &MainWindow::ClosedDrawDialogWithApply, &MainWindow::ApplyDrawDialog); @@ -1159,8 +1157,8 @@ void MainWindow::ToolFlippingByLine(bool checked) { ToolSelectOperationObjects(); const QString tooltip = tr("Select one or more objects, hold %1 - for multiple selection, " - "Enter - confirm selection") - .arg(QCoreApplication::translate(strQShortcut->toUtf8().constData(), strCtrl->toUtf8().constData())); + "%2 - confirm selection") + .arg(VModifierKey::Control(), VModifierKey::EnterKey()); SetToolButtonWithApply(checked, Tool::FlippingByLine, ":/cursor/flipping_line_cursor.png", tooltip, &MainWindow::ClosedDrawDialogWithApply, &MainWindow::ApplyDrawDialog); @@ -1171,8 +1169,8 @@ void MainWindow::ToolFlippingByAxis(bool checked) { ToolSelectOperationObjects(); const QString tooltip = tr("Select one or more objects, hold %1 - for multiple selection, " - "Enter - confirm selection") - .arg(QCoreApplication::translate(strQShortcut->toUtf8().constData(), strCtrl->toUtf8().constData())); + "%2 - confirm selection") + .arg(VModifierKey::Control(), VModifierKey::EnterKey()); SetToolButtonWithApply(checked, Tool::FlippingByAxis, ":/cursor/flipping_axis_cursor.png", tooltip, &MainWindow::ClosedDrawDialogWithApply, &MainWindow::ApplyDrawDialog); @@ -1183,8 +1181,8 @@ void MainWindow::ToolMove(bool checked) { ToolSelectOperationObjects(); const QString tooltip = tr("Select one or more objects, hold %1 - for multiple selection, " - "Enter - confirm selection") - .arg(QCoreApplication::translate(strQShortcut->toUtf8().constData(), strCtrl->toUtf8().constData())); + "%2 - confirm selection") + .arg(VModifierKey::Control(), VModifierKey::EnterKey()); SetToolButtonWithApply(checked, Tool::Move, ":/cursor/move_cursor.png", tooltip, &MainWindow::ClosedDrawDialogWithApply, &MainWindow::ApplyDrawDialog); diff --git a/src/libs/vmisc/vmisc.pri b/src/libs/vmisc/vmisc.pri index 824f99929..4b25de22f 100644 --- a/src/libs/vmisc/vmisc.pri +++ b/src/libs/vmisc/vmisc.pri @@ -12,7 +12,8 @@ SOURCES += \ $$PWD/qxtcsvmodel.cpp \ $$PWD/vtablesearch.cpp \ $$PWD/dialogs/dialogexporttocsv.cpp \ - $$PWD/literals.cpp + $$PWD/literals.cpp \ + $$PWD/vmodifierkey.cpp *msvc*:SOURCES += $$PWD/stable.cpp @@ -40,7 +41,8 @@ HEADERS += \ $$PWD/testvapplication.h \ $$PWD/literals.h \ $$PWD/qt_dispatch/qt_dispatch.h \ - $$PWD/vdatastreamenum.h + $$PWD/vdatastreamenum.h \ + $$PWD/vmodifierkey.h # Qt's versions # 5.2.0, 5.2.1 diff --git a/src/libs/vmisc/vmodifierkey.cpp b/src/libs/vmisc/vmodifierkey.cpp new file mode 100644 index 000000000..74e53e59c --- /dev/null +++ b/src/libs/vmisc/vmodifierkey.cpp @@ -0,0 +1,124 @@ +/************************************************************************ + ** + ** @file vmodifierkey.cpp + ** @author Roman Telezhynskyi + ** @date 14 2, 2019 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2019 Valentina project + ** All Rights Reserved. + ** + ** Valentina 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. + ** + ** Valentina 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 Valentina. If not, see . + ** + *************************************************************************/ +#include "vmodifierkey.h" + +#include + +//--------------------------------------------------------------------------------------------------------------------- +VModifierKey::VModifierKey(int key) + : m_nativeText(QKeySequence(static_cast(key)).toString(QKeySequence::NativeText)) +{ + if (m_nativeText.endsWith(QLatin1Char('+'))) + { + m_nativeText.chop(1); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +VModifierKey::VModifierKey(Qt::KeyboardModifiers keys) + : VModifierKey(static_cast(keys)) +{ + // nothing else +} + +//--------------------------------------------------------------------------------------------------------------------- +VModifierKey::VModifierKey(Qt::Key key) + : VModifierKey(static_cast(key)) +{ + // nothing else +} + +//--------------------------------------------------------------------------------------------------------------------- +const VModifierKey& VModifierKey::Alt() +{ + static const VModifierKey key(Qt::AltModifier); + return key; +} + +//--------------------------------------------------------------------------------------------------------------------- +const VModifierKey& VModifierKey::Control() +{ + static const VModifierKey key(Qt::ControlModifier); + return key; +} + +//--------------------------------------------------------------------------------------------------------------------- +const VModifierKey& VModifierKey::ControlShift() +{ + static const VModifierKey key(Qt::ControlModifier | Qt::ShiftModifier); + return key; +} + +//--------------------------------------------------------------------------------------------------------------------- +const VModifierKey& VModifierKey::Meta() +{ + static const VModifierKey key(Qt::MetaModifier); + return key; +} + +//--------------------------------------------------------------------------------------------------------------------- +const VModifierKey& VModifierKey::Shift() +{ + static const VModifierKey key(Qt::ShiftModifier); + return key; +} + +//--------------------------------------------------------------------------------------------------------------------- +const VModifierKey& VModifierKey::Space() +{ + static const VModifierKey key(Qt::Key_Space); + return key; +} + +//--------------------------------------------------------------------------------------------------------------------- +const VModifierKey& VModifierKey::ReturnKey() +{ + static const VModifierKey key(Qt::Key_Return); + return key; +} + +//--------------------------------------------------------------------------------------------------------------------- +const VModifierKey &VModifierKey::EnterKey() +{ + static const VModifierKey key(Qt::Key_Enter); + return key; +} + +//--------------------------------------------------------------------------------------------------------------------- +const VModifierKey& VModifierKey::Backspace() +{ + static const VModifierKey key(Qt::Key_Backspace); + return key; +} + +//--------------------------------------------------------------------------------------------------------------------- +const VModifierKey& VModifierKey::Escape() +{ + static const VModifierKey key(Qt::Key_Escape); + return key; +} diff --git a/src/libs/vmisc/vmodifierkey.h b/src/libs/vmisc/vmodifierkey.h new file mode 100644 index 000000000..91bb62f03 --- /dev/null +++ b/src/libs/vmisc/vmodifierkey.h @@ -0,0 +1,119 @@ +/************************************************************************ + ** + ** @file vmodifierkey.h + ** @author Roman Telezhynskyi + ** @date 14 2, 2019 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2019 Valentina project + ** All Rights Reserved. + ** + ** Valentina 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. + ** + ** Valentina 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 Valentina. If not, see . + ** + *************************************************************************/ +#ifndef VMODIFIERKEY_H +#define VMODIFIERKEY_H + +#include + +/** + * A class that helps to deal efficiently with platform and localization issues + * of modifier keys. + * + * It is based on QKeySequence::toString(QKeySequence::NativeText) which provides + * localization and deals with swapping Ctrl and Cmd on Mac OS X. In contrast + * to QKeySequence, VModifierKey has an implicit operator for casting to QString, + * and it removes the trailing '+' from pseudo key sequences which consist of + * modifier keys only. Static methods provide efficient translations of the + * pure modifier keys. + * + * For true QKeySequences, call QKeySequence::toString(QKeySequence::NativeText) + * directly. + * + * On Windows and Linux, the keys will be displayed as word ("Shift" etc.). + * On OS X, the keys will be displayed as graphical symbols ("⇧", i.e. + * Unicode character U+21E7, etc.). + * + * Synopsis: + * + * QString text = tr("%1+Click to add a point.").arg(VModifierKey::control()); + * QString more = tr("%1+Click to select a point.").arg(VModifierKey(Qt::ALT + Qt::ShiftModifier)); + * + * // BUT: + * QString help = help_action.shortcut().toString(QKeySequence::NativeText); + */ + +class VModifierKey +{ +public: + /** Constructs a new VModifierKey for the given combination of KeyboardModifiers. */ + explicit VModifierKey(Qt::KeyboardModifiers keys); + + /** Constructs a new VModifierKey for the given key. */ + explicit VModifierKey(Qt::Key key); + + /** Returns a string representation for user interface purposes. + * + * This operator is intented to be used for implicit type casts. */ + operator QString() const; + + /** Returns a shared Alt modifier key. */ + static const VModifierKey& Alt(); + + /** Returns a shared Control modifier key. */ + static const VModifierKey& Control(); + + /** Returns a shared Control+Shift modifier key. */ + static const VModifierKey& ControlShift(); + + /** Returns a shared Meta modifier key. */ + static const VModifierKey& Meta(); + + /** Returns a shared Shift modifier key. */ + static const VModifierKey& Shift(); + + /** Returns a shared Space key. */ + static const VModifierKey& Space(); + + /** Returns a shared Return key. */ + static const VModifierKey& ReturnKey(); + + /** Returns a shared Enter key. */ + static const VModifierKey& EnterKey(); + + /** Returns a shared Backspace key. */ + static const VModifierKey& Backspace(); + + /** Returns a shared Escape modifier key. */ + static const VModifierKey& Escape(); + +protected: + /** Constructs a new VModifierKey for the given key. */ + explicit VModifierKey(int key); + +private: + /** The native text (localized, adapted to the system). */ + QString m_nativeText; +}; + +//--------------------------------------------------------------------------------------------------------------------- +inline VModifierKey::operator QString() const +{ + return m_nativeText; +} + +#endif // VMODIFIERKEY_H diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp index 673b98ebf..6728ee350 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp @@ -33,6 +33,7 @@ #include "../../../tools/vabstracttool.h" #include "../../../tools/vtoolseamallowance.h" #include "../../support/dialogeditwrongformula.h" +#include "../vmisc/vmodifierkey.h" #include #include @@ -171,8 +172,9 @@ void DialogPiecePath::ChosenObject(quint32 id, const SceneObject &type) if (p.CountNodes() == 1) { - emit ToolTip(tr("Select main path objects, Shift - reverse direction curve, " - "Enter - finish creation")); + emit ToolTip(tr("Select main path objects, %1 - reverse direction curve, " + "%2 - finish creation") + .arg(VModifierKey::Shift(), VModifierKey::EnterKey())); if (not qApp->getCurrentScene()->items().contains(visPath)) { diff --git a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp index 1e33cfbff..7716b9ad7 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp @@ -49,6 +49,7 @@ #include "../../../tools/vtoolseamallowance.h" #include "../vgeometry/vplacelabelitem.h" #include "../../dialogtoolbox.h" +#include "../vmisc/vmodifierkey.h" #include #include @@ -430,8 +431,9 @@ void DialogSeamAllowance::ChosenObject(quint32 id, const SceneObject &type) if (p.GetPath().CountNodes() == 1) { - emit ToolTip(tr("Select main path objects clockwise, Shift - reverse direction curve, " - "Enter - finish creation")); + emit ToolTip(tr("Select main path objects clockwise, %1 - reverse direction curve, " + "%2 - finish creation") + .arg(VModifierKey::Shift(), VModifierKey::EnterKey())); if (not qApp->getCurrentScene()->items().contains(visPath)) { diff --git a/src/libs/vtools/visualization/line/operation/vistoolmove.cpp b/src/libs/vtools/visualization/line/operation/vistoolmove.cpp index 28bfb17d8..0e03ca68e 100644 --- a/src/libs/vtools/visualization/line/operation/vistoolmove.cpp +++ b/src/libs/vtools/visualization/line/operation/vistoolmove.cpp @@ -41,6 +41,7 @@ #include "../ifc/xml/vdomdocument.h" #include "../vmisc/diagnostic.h" +#include "../vmisc/vmodifierkey.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" #include "../vgeometry/vcubicbezier.h" @@ -172,26 +173,22 @@ void VisToolMove::RefreshGeometry() static const QString prefix = UnitsToStr(qApp->patternUnit(), true); if (qFuzzyIsNull(length)) { - Visualization::toolTip = tr("Length = %1%2, angle = %3°, Shift - sticking angle, " + Visualization::toolTip = tr("Length = %1%2, angle = %3°, %4 - sticking angle, " "Mouse click - finish selecting a position") .arg(qApp->TrVars()->FormulaToUser(QString::number(qApp->fromPixel(tempLength)), qApp->Settings()->GetOsSeparator()), prefix) - .arg(tempAngle); + .arg(tempAngle) + .arg(VModifierKey::Shift()); } else { - // String below need for getting translation for key Ctrl - // Translation comes from Qt library. Use variables to prevent adding to our translation files. - const QString strQShortcut = QStringLiteral("QShortcut"); // Context - const QString strCtrl = QStringLiteral("Ctrl"); // String - - Visualization::toolTip = tr("Length = %1%2, angle = %3°, rotation angle = %4°, Shift - sticking angle, " - "%5 - change rotation origin point, Mouse click - finish creating") + Visualization::toolTip = tr("Length = %1%2, angle = %3°, rotation angle = %4°, %5 - sticking angle, " + "%6 - change rotation origin point, Mouse click - finish creating") .arg(qApp->TrVars()->FormulaToUser(QString::number(qApp->fromPixel(tempLength)), qApp->Settings()->GetOsSeparator()), prefix) .arg(tempAngle) .arg(tempRoationAngle) - .arg(QCoreApplication::translate(strQShortcut.toUtf8().constData(), strCtrl.toUtf8().constData())); + .arg(VModifierKey::Shift(), VModifierKey::Control()); } CreateMovedRotatedObjects(iPoint, iCurve, tempLength, tempAngle, tempRoationAngle, origin); diff --git a/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp b/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp index c2d33636b..2f1bb7c3f 100644 --- a/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp +++ b/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp @@ -40,6 +40,7 @@ #include #include "../vmisc/diagnostic.h" +#include "../vmisc/vmodifierkey.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/varc.h" #include "../vgeometry/vcubicbezier.h" @@ -119,8 +120,10 @@ void VisToolRotation::RefreshGeometry() VArc arc(*origin, ScaledRadius(SceneScale(qApp->getCurrentScene()))*2, 0, tempAngle); DrawPath(angleArc, arc.GetPath(), supportColor2, Qt::SolidLine, Qt::RoundCap); - Visualization::toolTip = tr("Rotating angle = %1°, Shift - sticking angle, " - "Mouse click - finish creation").arg(tempAngle); + Visualization::toolTip = tr("Rotating angle = %1°, %2 - sticking angle, " + "Mouse click - finish creation") + .arg(tempAngle) + .arg(VModifierKey::Shift()); } int iPoint = -1; diff --git a/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp b/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp index 0926fd34f..aa0f1d0c6 100644 --- a/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp +++ b/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp @@ -45,6 +45,7 @@ #include "../vpatterndb/vcontainer.h" #include "../visualization.h" #include "visline.h" +#include "../vmisc/vmodifierkey.h" //--------------------------------------------------------------------------------------------------------------------- VisToolCurveIntersectAxis::VisToolCurveIntersectAxis(const VContainer *data, QGraphicsItem *parent) @@ -90,9 +91,10 @@ void VisToolCurveIntersectAxis::RefreshGeometry() DrawPoint(point, p, mainColor); - Visualization::toolTip = tr("Intersection curve and axis: angle = %1°; Shift - " - "sticking angle, Enter - finish creation") - .arg(this->line().angle()); + Visualization::toolTip = tr("Intersection curve and axis: angle = %1°; %2 - " + "sticking angle, %3 - finish creation") + .arg(this->line().angle()) + .arg(VModifierKey::Shift(), VModifierKey::EnterKey()); } } } diff --git a/src/libs/vtools/visualization/line/vistoolendline.cpp b/src/libs/vtools/visualization/line/vistoolendline.cpp index 0140c01ed..fcab20365 100644 --- a/src/libs/vtools/visualization/line/vistoolendline.cpp +++ b/src/libs/vtools/visualization/line/vistoolendline.cpp @@ -41,6 +41,7 @@ #include "../vgeometry/vpointf.h" #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" +#include "../vmisc/vmodifierkey.h" #include "../vpatterndb/vcontainer.h" #include "../visualization.h" #include "visline.h" @@ -80,10 +81,11 @@ void VisToolEndLine::RefreshGeometry() DrawLine(this, line, mainColor, lineStyle); static const QString prefix = UnitsToStr(qApp->patternUnit(), true); Visualization::toolTip = tr("Point at distance and angle: angle = %1°, length = %2%3; " - "Shift - sticking angle, Enter - finish creation") + "%4 - sticking angle, %5 - finish creation") .arg(this->line().angle()) .arg(qApp->TrVars()->FormulaToUser(QString::number(qApp->fromPixel(this->line().length())), - qApp->Settings()->GetOsSeparator()), prefix); + qApp->Settings()->GetOsSeparator()), + prefix, VModifierKey::Shift(), VModifierKey::EnterKey()); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp b/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp index bc8f4c1eb..e126bb1fb 100644 --- a/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp +++ b/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp @@ -42,6 +42,7 @@ #include "../vpatterndb/vcontainer.h" #include "../visualization.h" #include "visline.h" +#include "../vmisc/vmodifierkey.h" //--------------------------------------------------------------------------------------------------------------------- VisToolLineIntersectAxis::VisToolLineIntersectAxis(const VContainer *data, QGraphicsItem *parent) @@ -102,9 +103,10 @@ void VisToolLineIntersectAxis::RefreshGeometry() DrawPoint(point, p, mainColor); ShowIntersection(axis_line, base_line); - Visualization::toolTip = tr("Intersection line and axis: angle = %1°; Shift - " - "sticking angle, Enter - finish creation") - .arg(this->line().angle()); + Visualization::toolTip = tr("Intersection line and axis: angle = %1°; %2 - " + "sticking angle, %3 - finish creation") + .arg(this->line().angle()) + .arg(VModifierKey::Shift(), VModifierKey::EnterKey()); } } } diff --git a/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp b/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp index 275117b1b..e1a3fa64a 100644 --- a/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp +++ b/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp @@ -42,6 +42,7 @@ #include "../visualization.h" #include "vispath.h" #include "../vwidgets/scalesceneitems.h" +#include "../vmisc/vmodifierkey.h" //--------------------------------------------------------------------------------------------------------------------- VisToolCubicBezierPath::VisToolCubicBezierPath(const VContainer *data, QGraphicsItem *parent) @@ -286,7 +287,8 @@ void VisToolCubicBezierPath::RefreshToolTip() else if (size - VCubicBezierPath::SubSplPointsCount(countSubSpl) == 0) { Visualization::toolTip = tr("Curved path: select seven or more points, " - "Enter - finish creation"); + "%1 - finish creation") + .arg(VModifierKey::EnterKey()); } else { diff --git a/src/libs/vtools/visualization/path/vistoolspline.cpp b/src/libs/vtools/visualization/path/vistoolspline.cpp index 714085a09..f3b8b7beb 100644 --- a/src/libs/vtools/visualization/path/vistoolspline.cpp +++ b/src/libs/vtools/visualization/path/vistoolspline.cpp @@ -44,6 +44,7 @@ #include "../vwidgets/scalesceneitems.h" #include "../visualization.h" #include "vispath.h" +#include "../vmisc/vmodifierkey.h" const int EMPTY_ANGLE = -1; @@ -170,7 +171,8 @@ void VisToolSpline::RefreshGeometry() VSpline spline(*first, *second, angle1, angle2, kAsm1, kAsm2, kCurve); spline.SetApproximationScale(m_approximationScale); DrawPath(this, spline.GetPath(), spline.DirectionArrows(), mainColor, lineStyle, Qt::RoundCap); - Visualization::toolTip = tr("Use Shift for sticking angle!"); + Visualization::toolTip = tr("Use %1 for sticking angle!") + .arg(VModifierKey::Shift()); emit ToolTip(Visualization::toolTip); } } diff --git a/src/libs/vtools/visualization/path/vistoolsplinepath.cpp b/src/libs/vtools/visualization/path/vistoolsplinepath.cpp index b2b315517..17dd058b9 100644 --- a/src/libs/vtools/visualization/path/vistoolsplinepath.cpp +++ b/src/libs/vtools/visualization/path/vistoolsplinepath.cpp @@ -45,6 +45,7 @@ #include "../vwidgets/scalesceneitems.h" #include "../visualization.h" #include "vispath.h" +#include "../vmisc/vmodifierkey.h" //--------------------------------------------------------------------------------------------------------------------- VisToolSplinePath::VisToolSplinePath(const VContainer *data, QGraphicsItem *parent) @@ -115,11 +116,13 @@ void VisToolSplinePath::RefreshGeometry() else { Visualization::toolTip = tr("Curved path: select three or more points, " - "Enter - finish creation"); + "%1 - finish creation") + .arg(VModifierKey::EnterKey()); } if (mode == Mode::Show) { - Visualization::toolTip = tr("Use Shift for sticking angle!"); + Visualization::toolTip = tr("Use %1 for sticking angle!") + .arg(VModifierKey::Shift()); emit ToolTip(Visualization::toolTip); } }