fix shortcut input

This commit is contained in:
shun-iwasawa 2021-04-26 17:30:56 +09:00 committed by manongjohn
parent abf861c0c6
commit 955b94eb4c
8 changed files with 101 additions and 61 deletions

View file

@ -1655,6 +1655,17 @@ QDialog #dialogButtonFrame QPushButton:focus:pressed {
width: 16; width: 16;
margin-right: -1; margin-right: -1;
} }
#ShortcutViewer {
font-size: 17px;
}
#ShortcutViewer QLineEdit {
color: black;
border-color: #b8bc7f;
background-color: white;
}
#ShortcutViewer QLineEdit:focus {
background-color: #abceff;
}
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
New Project / Configure Project Window New Project / Configure Project Window
----------------------------------------------------------------------------- */ ----------------------------------------------------------------------------- */

View file

@ -1655,6 +1655,17 @@ QDialog #dialogButtonFrame QPushButton:focus:pressed {
width: 16; width: 16;
margin-right: -1; margin-right: -1;
} }
#ShortcutViewer {
font-size: 17px;
}
#ShortcutViewer QLineEdit {
color: black;
border-color: #b8bc7f;
background-color: white;
}
#ShortcutViewer QLineEdit:focus {
background-color: #abceff;
}
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
New Project / Configure Project Window New Project / Configure Project Window
----------------------------------------------------------------------------- */ ----------------------------------------------------------------------------- */

View file

@ -1655,6 +1655,17 @@ QDialog #dialogButtonFrame QPushButton:focus:pressed {
width: 16; width: 16;
margin-right: -1; margin-right: -1;
} }
#ShortcutViewer {
font-size: 17px;
}
#ShortcutViewer QLineEdit {
color: black;
border-color: #b8bc7f;
background-color: white;
}
#ShortcutViewer QLineEdit:focus {
background-color: #abceff;
}
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
New Project / Configure Project Window New Project / Configure Project Window
----------------------------------------------------------------------------- */ ----------------------------------------------------------------------------- */

View file

@ -1655,6 +1655,17 @@ QDialog #dialogButtonFrame QPushButton:focus:pressed {
width: 16; width: 16;
margin-right: -1; margin-right: -1;
} }
#ShortcutViewer {
font-size: 17px;
}
#ShortcutViewer QLineEdit {
color: black;
border-color: #b8bc7f;
background-color: white;
}
#ShortcutViewer QLineEdit:focus {
background-color: #abceff;
}
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
New Project / Configure Project Window New Project / Configure Project Window
----------------------------------------------------------------------------- */ ----------------------------------------------------------------------------- */

View file

@ -77,6 +77,18 @@ QDialog {
} }
} }
#ShortcutViewer {
font-size: 17px;
& QLineEdit{
color:black;
border-color: rgb(184, 188, 127);
background-color: white;
&:focus{
background-color: rgb(171, 206, 255);
}
}
}
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
New Project / Configure Project Window New Project / Configure Project Window
----------------------------------------------------------------------------- */ ----------------------------------------------------------------------------- */

View file

@ -1655,6 +1655,17 @@ QDialog #dialogButtonFrame QPushButton:focus:pressed {
width: 16; width: 16;
margin-right: -1; margin-right: -1;
} }
#ShortcutViewer {
font-size: 17px;
}
#ShortcutViewer QLineEdit {
color: black;
border-color: #b8bc7f;
background-color: white;
}
#ShortcutViewer QLineEdit:focus {
background-color: #abceff;
}
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
New Project / Configure Project Window New Project / Configure Project Window
----------------------------------------------------------------------------- */ ----------------------------------------------------------------------------- */

View file

@ -72,8 +72,11 @@ public:
// ShortcutViewer // ShortcutViewer
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
ShortcutViewer::ShortcutViewer(QWidget *parent) : QWidget(parent), m_action(0) { ShortcutViewer::ShortcutViewer(QWidget *parent)
: QKeySequenceEdit(parent), m_action(0) {
setObjectName("ShortcutViewer");
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
connect(this, SIGNAL(editingFinished()), this, SLOT(onEditingFinished()));
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -82,64 +85,23 @@ ShortcutViewer::~ShortcutViewer() {}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void ShortcutViewer::paintEvent(QPaintEvent *) {
QPainter p(this);
// sfondo azzurro se il widget ha il focus (e quindi si accorge dei tasti
// premuti)
p.fillRect(1, 1, width() - 1, height() - 1,
QBrush(hasFocus() ? QColor(171, 206, 255) : Qt::white));
// bordo
p.setPen(QColor(184, 188, 127));
p.drawRect(0, 0, width() - 1, height() - 1);
if (m_action) {
// lo shortcut corrente
p.setPen(Qt::black);
p.drawText(10, 13, m_action->shortcut().toString());
}
}
//-----------------------------------------------------------------------------
void ShortcutViewer::setAction(QAction *action) { void ShortcutViewer::setAction(QAction *action) {
m_action = action; m_action = action;
update(); setKeySequence(m_action->shortcut());
setFocus(); setFocus();
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
bool ShortcutViewer::event(QEvent *event) {
// quando si vuole assegnare una combinazione che gia' assegnata bisogna
// evitare che lo shortcut relativo agisca.
if (event->type() == QEvent::ShortcutOverride) {
event->accept();
return true;
} else
return QWidget::event(event);
}
//-----------------------------------------------------------------------------
void ShortcutViewer::keyPressEvent(QKeyEvent *event) { void ShortcutViewer::keyPressEvent(QKeyEvent *event) {
int key = event->key(); int key = event->key();
if (key == Qt::Key_Control || key == Qt::Key_Shift || key == Qt::Key_Alt) {
event->ignore();
return;
}
Qt::KeyboardModifiers modifiers = event->modifiers(); Qt::KeyboardModifiers modifiers = event->modifiers();
// Keys that cannot be used as shortcuts if (key == Qt::Key_Home || key == Qt::Key_End || key == Qt::Key_PageDown ||
if ((modifiers | (Qt::CTRL | Qt::SHIFT | Qt::ALT)) !=
(Qt::CTRL | Qt::SHIFT | Qt::ALT) ||
key == Qt::Key_Home || key == Qt::Key_End || key == Qt::Key_PageDown ||
key == Qt::Key_PageUp || key == Qt::Key_Escape || key == Qt::Key_Print || key == Qt::Key_PageUp || key == Qt::Key_Escape || key == Qt::Key_Print ||
key == Qt::Key_Pause || key == Qt::Key_ScrollLock) { key == Qt::Key_Pause || key == Qt::Key_ScrollLock) {
if (key != Qt::Key_Plus && key != Qt::Key_Minus && event->ignore();
key != Qt::Key_Asterisk && key != Qt::Key_Slash) { return;
event->ignore();
return;
} else
modifiers = 0;
} }
// Block the arrows // Block the arrows
@ -158,28 +120,40 @@ void ShortcutViewer::keyPressEvent(QKeyEvent *event) {
event->ignore(); event->ignore();
return; return;
} }
QKeySequenceEdit::keyPressEvent(event);
}
//-----------------------------------------------------------------------------
void ShortcutViewer::onEditingFinished() {
// limit to one shortcut key input
QKeySequence keys = (keySequence().isEmpty())
? QKeySequence()
: QKeySequence(keySequence()[0]);
if (m_action) { if (m_action) {
CommandManager *cm = CommandManager::instance(); CommandManager *cm = CommandManager::instance();
QKeySequence keySequence(key + modifiers); std::string shortcutString = keys.toString().toStdString();
std::string shortcutString = keySequence.toString().toStdString();
QAction *oldAction = QAction *oldAction =
cm->getActionFromShortcut(keySequence.toString().toStdString()); cm->getActionFromShortcut(keys.toString().toStdString());
if (oldAction == m_action) return; if (oldAction == m_action) return;
if (oldAction) { if (oldAction) {
QString msg = tr("%1 is already assigned to '%2'\nAssign to '%3'?") QString msg = tr("%1 is already assigned to '%2'\nAssign to '%3'?")
.arg(keySequence.toString()) .arg(keys.toString())
.arg(oldAction->iconText()) .arg(oldAction->iconText())
.arg(m_action->iconText()); .arg(m_action->iconText());
int ret = DVGui::MsgBox(msg, tr("Yes"), tr("No"), 1); int ret = DVGui::MsgBox(msg, tr("Yes"), tr("No"), 1);
activateWindow(); activateWindow();
if (ret == 2 || ret == 0) return; if (ret == 2 || ret == 0) {
setKeySequence(m_action->shortcut());
setFocus();
return;
}
} }
CommandManager::instance()->setShortcut(m_action, shortcutString); CommandManager::instance()->setShortcut(m_action, shortcutString);
emit shortcutChanged(); emit shortcutChanged();
} }
event->accept(); setKeySequence(keys);
update();
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -188,7 +162,7 @@ void ShortcutViewer::removeShortcut() {
if (m_action) { if (m_action) {
CommandManager::instance()->setShortcut(m_action, "", false); CommandManager::instance()->setShortcut(m_action, "", false);
emit shortcutChanged(); emit shortcutChanged();
update(); clear();
} }
} }

View file

@ -6,6 +6,7 @@
#include <QDialog> #include <QDialog>
#include <QTreeWidget> #include <QTreeWidget>
#include <QComboBox> #include <QComboBox>
#include <QKeySequenceEdit>
#include "filebrowserpopup.h" #include "filebrowserpopup.h"
#include "toonzqt/dvdialog.h" #include "toonzqt/dvdialog.h"
@ -22,7 +23,7 @@ class ShortcutItem;
// Per cancellarlo bisogna chiamare removeShortcut() // Per cancellarlo bisogna chiamare removeShortcut()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class ShortcutViewer final : public QWidget { class ShortcutViewer final : public QKeySequenceEdit {
Q_OBJECT Q_OBJECT
QAction *m_action; QAction *m_action;
@ -31,15 +32,13 @@ public:
~ShortcutViewer(); ~ShortcutViewer();
protected: protected:
void paintEvent(QPaintEvent *) override;
bool event(QEvent *event) override;
void keyPressEvent(QKeyEvent *event) override;
void enterEvent(QEvent *event) override; void enterEvent(QEvent *event) override;
void leaveEvent(QEvent *event) override; void leaveEvent(QEvent *event) override;
void keyPressEvent(QKeyEvent *event) override;
public slots: public slots:
void setAction(QAction *action); void setAction(QAction *action);
void removeShortcut(); void removeShortcut();
void onEditingFinished();
signals: signals:
void shortcutChanged(); void shortcutChanged();