2021-05-07 07:22:55 +02:00

68 lines
2.1 KiB
C++

// For license of this file, see <project-root-folder>/LICENSE.md.
#include "dynamic-shortcuts/shortcutcatcher.h"
#include "gui/plaintoolbutton.h"
#include "miscellaneous/iconfactory.h"
#include <QHBoxLayout>
#include <QKeySequenceEdit>
ShortcutCatcher::ShortcutCatcher(QWidget* parent)
: QWidget(parent), m_isRecording(false), m_numKey(0), m_modifierKeys(0U) {
// Setup layout of the control
m_layout = new QHBoxLayout(this);
m_layout->setContentsMargins({});
m_layout->setSpacing(1);
// Create reset button.
m_btnReset = new PlainToolButton(this);
m_btnReset->setIcon(qApp->icons()->fromTheme(QSL("document-revert")));
m_btnReset->setFocusPolicy(Qt::FocusPolicy::NoFocus);
m_btnReset->setToolTip(tr("Reset to original shortcut."));
// Create clear button.
m_btnClear = new PlainToolButton(this);
m_btnClear->setIcon(qApp->icons()->fromTheme(QSL("list-remove")));
m_btnClear->setFocusPolicy(Qt::FocusPolicy::NoFocus);
m_btnClear->setToolTip(tr("Clear current shortcut."));
// Clear main shortcut catching button.
m_shortcutBox = new QKeySequenceEdit(this);
m_shortcutBox->setFocusPolicy(Qt::FocusPolicy::StrongFocus);
m_shortcutBox->setMinimumWidth(170);
m_shortcutBox->setToolTip(tr("Click and hit new shortcut."));
// Add all buttons to the layout.
m_layout->addWidget(m_shortcutBox);
m_layout->addWidget(m_btnReset);
m_layout->addWidget(m_btnClear);
// Establish needed connections.
connect(m_btnReset, &QToolButton::clicked, this, &ShortcutCatcher::resetShortcut);
connect(m_btnClear, &QToolButton::clicked, this, &ShortcutCatcher::clearShortcut);
connect(m_shortcutBox, &QKeySequenceEdit::keySequenceChanged, this, &ShortcutCatcher::shortcutChanged);
}
QKeySequence ShortcutCatcher::shortcut() const {
return m_shortcutBox->keySequence();
}
void ShortcutCatcher::setDefaultShortcut(const QKeySequence& key) {
m_defaultSequence = key;
setShortcut(key);
}
void ShortcutCatcher::setShortcut(const QKeySequence& key) {
m_shortcutBox->setKeySequence(key);
}
void ShortcutCatcher::resetShortcut() {
setShortcut(m_defaultSequence);
}
void ShortcutCatcher::clearShortcut() {
setShortcut(QKeySequence());
}