diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt index b99671f0..0524076c 100644 --- a/src/tools/CMakeLists.txt +++ b/src/tools/CMakeLists.txt @@ -37,6 +37,7 @@ target_sources( target_sources(flameshot PRIVATE rectangle/rectangletool.h rectangle/rectangletool.cpp) target_sources(flameshot PRIVATE redo/redotool.h redo/redotool.cpp) target_sources(flameshot PRIVATE save/savetool.h save/savetool.cpp) +target_sources(flameshot PRIVATE accept/accepttool.h accept/accepttool.cpp) target_sources(flameshot PRIVATE invert/inverttool.h invert/inverttool.cpp) target_sources(flameshot PRIVATE selection/selectiontool.h selection/selectiontool.cpp) target_sources(flameshot PRIVATE sizeindicator/sizeindicatortool.h sizeindicator/sizeindicatortool.cpp) diff --git a/src/tools/accept/accepttool.cpp b/src/tools/accept/accepttool.cpp new file mode 100644 index 00000000..d307353a --- /dev/null +++ b/src/tools/accept/accepttool.cpp @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors + +#include "accepttool.h" +#include "src/utils/screenshotsaver.h" +#include +#include +#include +#if defined(Q_OS_MACOS) +#include "src/widgets/capture/capturewidget.h" +#include +#include +#endif + +AcceptTool::AcceptTool(QObject* parent) + : AbstractActionTool(parent) +{} + +bool AcceptTool::closeOnButtonPressed() const +{ + return true; +} + +QIcon AcceptTool::icon(const QColor& background, bool inEditor) const +{ + Q_UNUSED(inEditor) + // TODO add new icon + return qApp->style()->standardIcon(QStyle::SP_DialogApplyButton); +} + +QString AcceptTool::name() const +{ + return tr("Accept"); +} + +CaptureTool::Type AcceptTool::type() const +{ + return CaptureTool::TYPE_ACCEPT; +} + +QString AcceptTool::description() const +{ + // TODO better message + return tr("Accept the capture"); +} + +CaptureTool* AcceptTool::copy(QObject* parent) +{ + return new AcceptTool(parent); +} + +void AcceptTool::pressed(const CaptureContext&) +{ +#if defined(Q_OS_MACOS) + for (QWidget* widget : qApp->topLevelWidgets()) { + QString className(widget->metaObject()->className()); + if (0 == + className.compare(CaptureWidget::staticMetaObject.className())) { + widget->showNormal(); + widget->hide(); + break; + } + } +#endif + emit requestAction(REQ_CLEAR_SELECTION); + emit requestAction(REQ_CAPTURE_DONE_OK); + emit requestAction(REQ_HIDE_GUI); +} diff --git a/src/tools/accept/accepttool.h b/src/tools/accept/accepttool.h new file mode 100644 index 00000000..a8e66059 --- /dev/null +++ b/src/tools/accept/accepttool.h @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors + +#pragma once + +#include "abstractactiontool.h" + +class AcceptTool : public AbstractActionTool +{ + Q_OBJECT +public: + explicit AcceptTool(QObject* parent = nullptr); + + bool closeOnButtonPressed() const override; + + QIcon icon(const QColor& background, bool inEditor) const override; + QString name() const override; + QString description() const override; + + CaptureTool* copy(QObject* parent = nullptr) override; + +protected: + CaptureTool::Type type() const override; + +public slots: + void pressed(const CaptureContext& context) override; +}; diff --git a/src/tools/capturetool.h b/src/tools/capturetool.h index 19871ac8..db6500b3 100644 --- a/src/tools/capturetool.h +++ b/src/tools/capturetool.h @@ -47,6 +47,7 @@ public: TYPE_SIZEINCREASE = 20, TYPE_SIZEDECREASE = 21, TYPE_INVERT = 22, + TYPE_ACCEPT = 23, }; Q_ENUM(Type); diff --git a/src/tools/toolfactory.cpp b/src/tools/toolfactory.cpp index 3f837d84..c442aca2 100644 --- a/src/tools/toolfactory.cpp +++ b/src/tools/toolfactory.cpp @@ -2,6 +2,7 @@ // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "toolfactory.h" +#include "accept/accepttool.h" #include "arrow/arrowtool.h" #include "circle/circletool.h" #include "circlecount/circlecounttool.h" @@ -63,6 +64,7 @@ CaptureTool* ToolFactory::CreateTool(CaptureTool::Type t, QObject* parent) if_TYPE_return_TOOL(TYPE_SIZEINCREASE, SizeIncreaseTool); if_TYPE_return_TOOL(TYPE_SIZEDECREASE, SizeDecreaseTool); if_TYPE_return_TOOL(TYPE_INVERT, InvertTool); + if_TYPE_return_TOOL(TYPE_ACCEPT, AcceptTool); default: return nullptr; } diff --git a/src/utils/confighandler.cpp b/src/utils/confighandler.cpp index e45d2486..0836eb40 100644 --- a/src/utils/confighandler.cpp +++ b/src/utils/confighandler.cpp @@ -126,6 +126,7 @@ static QMap> recognizedShortcuts = { SHORTCUT("TYPE_UNDO" , "Ctrl+Z" ), SHORTCUT("TYPE_COPY" , "Ctrl+C" ), SHORTCUT("TYPE_SAVE" , "Ctrl+S" ), + SHORTCUT("TYPE_ACCEPT" , "Return" ), SHORTCUT("TYPE_EXIT" , "Ctrl+Q" ), SHORTCUT("TYPE_IMAGEUPLOADER" , "Ctrl+U" ), #if !defined(Q_OS_MACOS) diff --git a/src/widgets/capture/capturetoolbutton.cpp b/src/widgets/capture/capturetoolbutton.cpp index a54d8595..8dc4f9ca 100644 --- a/src/widgets/capture/capturetoolbutton.cpp +++ b/src/widgets/capture/capturetoolbutton.cpp @@ -141,15 +141,16 @@ static std::map buttonTypeOrder { CaptureTool::TYPE_MOVESELECTION, 12 }, { CaptureTool::TYPE_UNDO, 13 }, { CaptureTool::TYPE_REDO, 14 }, { CaptureTool::TYPE_COPY, 15 }, { CaptureTool::TYPE_SAVE, 16 }, { CaptureTool::TYPE_IMAGEUPLOADER, 17 }, + { CaptureTool::TYPE_ACCEPT, 18 }, #if !defined(Q_OS_MACOS) - { CaptureTool::TYPE_OPEN_APP, 18 }, { CaptureTool::TYPE_EXIT, 19 }, - { CaptureTool::TYPE_PIN, 20 }, + { CaptureTool::TYPE_OPEN_APP, 19 }, { CaptureTool::TYPE_EXIT, 20 }, + { CaptureTool::TYPE_PIN, 21 }, #else - { CaptureTool::TYPE_EXIT, 18 }, { CaptureTool::TYPE_PIN, 19 }, + { CaptureTool::TYPE_EXIT, 19 }, { CaptureTool::TYPE_PIN, 20 }, #endif - { CaptureTool::TYPE_SIZEINCREASE, 21 }, - { CaptureTool::TYPE_SIZEDECREASE, 22 }, + { CaptureTool::TYPE_SIZEINCREASE, 22 }, + { CaptureTool::TYPE_SIZEDECREASE, 23 }, }; int CaptureToolButton::getPriorityByButton(CaptureTool::Type b) @@ -185,4 +186,5 @@ QList CaptureToolButton::iterableButtonTypes = { CaptureTool::TYPE_CIRCLECOUNT, CaptureTool::TYPE_SIZEINCREASE, CaptureTool::TYPE_SIZEDECREASE, + CaptureTool::TYPE_ACCEPT, };