Better hotkey input

This commit is contained in:
ArsenArsen 2017-06-27 12:46:35 +02:00
parent 2bd01bf181
commit 67c8f5c5cf
6 changed files with 154 additions and 8 deletions

View File

@ -62,7 +62,8 @@ SOURCES += main.cpp\
aboutbox.cpp \
cropeditor/drawing/eraseritem.cpp \
cropeditor/drawing/rectitem.cpp \
cropeditor/drawing/ellipseitem.cpp
cropeditor/drawing/ellipseitem.cpp \
hotkeyinputdialog.cpp
HEADERS += mainwindow.hpp \
cropeditor/cropeditor.hpp \
@ -103,7 +104,8 @@ HEADERS += mainwindow.hpp \
aboutbox.hpp \
cropeditor/drawing/eraseritem.hpp \
cropeditor/drawing/rectitem.hpp \
cropeditor/drawing/ellipseitem.hpp
cropeditor/drawing/ellipseitem.hpp \
hotkeyinputdialog.hpp
LIBS += -lavcodec -lavformat -lavutil -lswscale -lavutil
@ -131,7 +133,8 @@ FORMS += mainwindow.ui \
cropeditor/settings/blurdialog.ui \
recording/encoders/encodersettingsdialog.ui \
settingsdialog.ui \
aboutbox.ui
aboutbox.ui \
hotkeyinputdialog.ui
DISTFILES += \
README.md \

37
hotkeyinputdialog.cpp Normal file
View File

@ -0,0 +1,37 @@
#include "hotkeyinputdialog.hpp"
#include "ui_hotkeyinputdialog.h"
#include <QKeyEvent>
#include <QLineEdit>
#include <QPushButton>
HotkeyInputDialog::HotkeyInputDialog(QString hotkeyName, QKeySequence currentSeq, QWidget *parent)
: QDialog(parent), ui(new Ui::HotkeyInputDialog) {
ui->setupUi(this);
ui->keySeq->setText(currentSeq.toString());
setWindowTitle(hotkeyName);
connect(this, &QDialog::accepted, [&] {
QKeySequence s(ui->keySeq->text());
if (!s.toString().isEmpty()) emit sequenceSelected(s, windowTitle());
});
}
HotkeyInputDialog::~HotkeyInputDialog() {
delete ui;
}
void HotkeyInputDialog::keyPressEvent(QKeyEvent *e) {
if (e->key() == Qt::Key_Shift || e->key() == Qt::Key_Control || e->key() == Qt::Key_Alt || e->key() == Qt::Key_AltGr
|| e->key() == Qt::Key_Context1 || e->key() == Qt::Key_Context2 || e->key() == Qt::Key_Context3 || e->key() == Qt::Key_Context4)
return;
if (recording) {
QKeySequence seq(e->modifiers() + e->key());
ui->keySeq->setText(seq.toString());
recording = false;
ui->recordButton->setText("Record");
}
}
void HotkeyInputDialog::on_recordButton_clicked() {
recording = !recording;
ui->recordButton->setText(recording ? "Stop recording" : "Record");
}

31
hotkeyinputdialog.hpp Normal file
View File

@ -0,0 +1,31 @@
#ifndef HOTKEYINPUTDIALOG_HPP
#define HOTKEYINPUTDIALOG_HPP
#include <QDialog>
namespace Ui {
class HotkeyInputDialog;
}
class HotkeyInputDialog : public QDialog {
Q_OBJECT
public:
explicit HotkeyInputDialog(QString hotkeyName, QKeySequence currentSeq, QWidget *parent = 0);
~HotkeyInputDialog();
signals:
void sequenceSelected(QKeySequence seq, QString name);
protected:
void keyPressEvent(QKeyEvent *e) override;
private slots:
void on_recordButton_clicked();
private:
bool recording = false;
Ui::HotkeyInputDialog *ui;
};
#endif // HOTKEYINPUTDIALOG_HPP

74
hotkeyinputdialog.ui Normal file
View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>HotkeyInputDialog</class>
<widget class="QDialog" name="HotkeyInputDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>255</width>
<height>80</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLineEdit" name="keySeq"/>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="recordButton">
<property name="text">
<string>Record</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>HotkeyInputDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>HotkeyInputDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -1,5 +1,6 @@
#include "mainwindow.hpp"
#include "screenshotutil.hpp"
#include "ui_mainwindow.h"
#include <QApplication>
#include <QCommandLineParser>
#include <QDebug>
@ -11,7 +12,6 @@ extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
}
#include "ui_mainwindow.h"
#include <QListWidget>
#include <notifications.hpp>
#include <platformbackend.hpp>

View File

@ -1,4 +1,5 @@
#include "settingsdialog.hpp"
#include "hotkeyinputdialog.hpp"
#include "mainwindow.hpp"
#include "ui_settingsdialog.h"
@ -111,10 +112,10 @@ void SettingsDialog::on_hotkeys_doubleClicked(const QModelIndex &) {
if (ui->hotkeys->selectedItems().length() == 1) {
QListWidgetItem *i = ui->hotkeys->selectedItems().at(0);
QString str = i->data(Qt::UserRole + 1).toString();
bool ok;
QString seq = QInputDialog::getText(MainWindow::inst(), "Hotkey Input", "Insert hotkey:", QLineEdit::Normal,
hotkeying::sequence(str), &ok);
if (ok && hotkeying::valid(seq)) hotkeying::hotkey(str, QKeySequence(seq), fncs.value(str));
HotkeyInputDialog *hotkey = new HotkeyInputDialog(str, hotkeying::sequence(str), this);
connect(hotkey, &HotkeyInputDialog::sequenceSelected,
[&](QKeySequence seq, QString name) { hotkeying::hotkey(name, seq, fncs.value(name)); });
hotkey->show();
}
}