diff --git a/ui/src/CMakeLists.txt b/ui/src/CMakeLists.txt
index acb69d739b..5f09c7bf82 100644
--- a/ui/src/CMakeLists.txt
+++ b/ui/src/CMakeLists.txt
@@ -141,6 +141,7 @@ add_library(${module_name}
virtualconsole/vcmatrixproperties.cpp virtualconsole/vcmatrixproperties.h virtualconsole/vcmatrixproperties.ui
virtualconsole/vcproperties.cpp virtualconsole/vcproperties.h virtualconsole/vcproperties.ui
virtualconsole/vcpropertieseditor.cpp virtualconsole/vcpropertieseditor.h
+ virtualconsole/vcscrollarea.cpp virtualconsole/vcscrollarea.h
virtualconsole/vcslider.cpp virtualconsole/vcslider.h
virtualconsole/vcsliderproperties.cpp virtualconsole/vcsliderproperties.h virtualconsole/vcsliderproperties.ui
virtualconsole/vcsoloframe.cpp virtualconsole/vcsoloframe.h
diff --git a/ui/src/assignhotkey.cpp b/ui/src/assignhotkey.cpp
index d9e56d971e..f88c669f1e 100644
--- a/ui/src/assignhotkey.cpp
+++ b/ui/src/assignhotkey.cpp
@@ -30,6 +30,7 @@
#define SETTINGS_GEOMETRY "assignhotkey/geometry"
#define SETTINGS_AUTOCLOSE "assignhotkey/autoclose"
+
/*****************************************************************************
* Initialization
*****************************************************************************/
@@ -59,11 +60,8 @@ AssignHotKey::AssignHotKey(QWidget* parent, const QKeySequence& keySequence)
m_infoText->setFocusPolicy(Qt::NoFocus);
m_buttonBox->setFocusPolicy(Qt::NoFocus);
- m_previewEdit->setReadOnly(true);
- m_previewEdit->setAlignment(Qt::AlignCenter);
-
m_keySequence = QKeySequence(keySequence);
- m_previewEdit->setText(m_keySequence.toString(QKeySequence::NativeText));
+ m_previewLabel->setText(m_keySequence.toString(QKeySequence::NativeText));
QSettings settings;
m_autoCloseCheckBox->setChecked(settings.value(SETTINGS_AUTOCLOSE).toBool());
@@ -89,13 +87,14 @@ void AssignHotKey::keyPressEvent(QKeyEvent* event)
{
int key = event->key();
if (event->key() == Qt::Key_Control || event->key() == Qt::Key_Alt ||
- event->key() == Qt::Key_Shift || event->key() == Qt::Key_Meta)
+ event->key() == Qt::Key_Shift || event->key() == Qt::Key_Meta ||
+ event->modifiers() == Qt::ControlModifier)
{
key = 0;
}
m_keySequence = QKeySequence(key | (event->modifiers() & ~Qt::ControlModifier));
- m_previewEdit->setText(m_keySequence.toString(QKeySequence::NativeText));
+ m_previewLabel->setText(m_keySequence.toString(QKeySequence::NativeText));
if (m_autoCloseCheckBox->isChecked() == true && key != 0)
accept();
diff --git a/ui/src/assignhotkey.ui b/ui/src/assignhotkey.ui
index a97f1030e4..0742b74dbd 100644
--- a/ui/src/assignhotkey.ui
+++ b/ui/src/assignhotkey.ui
@@ -37,7 +37,7 @@
-
-
+
Key combination
@@ -47,12 +47,27 @@
-
-
+
+
+
+ 0
+ 0
+
+
+
+ Qt::StrongFocus
+
+
+ QFrame::Box
+
+
+
+
Qt::AlignCenter
-
- true
+
+ 3
diff --git a/ui/src/src.pro b/ui/src/src.pro
index 8f80738cca..8f6a5f6caf 100644
--- a/ui/src/src.pro
+++ b/ui/src/src.pro
@@ -155,6 +155,7 @@ HEADERS += virtualconsole/addvcbuttonmatrix.h \
virtualconsole/vcmatrixproperties.h \
virtualconsole/vcproperties.h \
virtualconsole/vcpropertieseditor.h \
+ virtualconsole/vcscrollarea.h \
virtualconsole/vcslider.h \
virtualconsole/vcsliderproperties.h \
virtualconsole/vcsoloframe.h \
@@ -337,6 +338,7 @@ SOURCES += virtualconsole/addvcbuttonmatrix.cpp \
virtualconsole/vcmatrixproperties.cpp \
virtualconsole/vcproperties.cpp \
virtualconsole/vcpropertieseditor.cpp \
+ virtualconsole/vcscrollarea.cpp \
virtualconsole/vcslider.cpp \
virtualconsole/vcsliderproperties.cpp \
virtualconsole/vcsoloframe.cpp \
diff --git a/ui/src/virtualconsole/vcproperties.cpp b/ui/src/virtualconsole/vcproperties.cpp
index 5d6f96c6a8..7adbc46f2f 100644
--- a/ui/src/virtualconsole/vcproperties.cpp
+++ b/ui/src/virtualconsole/vcproperties.cpp
@@ -33,6 +33,7 @@
VCProperties::VCProperties()
: m_size(QSize(1920, 1080))
+ , m_keyboardScroll(true)
, m_gmChannelMode(GrandMaster::Intensity)
, m_gmValueMode(GrandMaster::Reduce)
, m_gmSliderMode(GrandMaster::Normal)
@@ -43,6 +44,7 @@ VCProperties::VCProperties()
VCProperties::VCProperties(const VCProperties& properties)
: m_size(properties.m_size)
+ , m_keyboardScroll(properties.m_keyboardScroll)
, m_gmChannelMode(properties.m_gmChannelMode)
, m_gmValueMode(properties.m_gmValueMode)
, m_gmSliderMode(properties.m_gmSliderMode)
@@ -60,6 +62,7 @@ VCProperties &VCProperties::operator=(const VCProperties &props)
if (this != &props)
{
m_size = props.m_size;
+ m_keyboardScroll = props.m_keyboardScroll;
m_gmChannelMode = props.m_gmChannelMode;
m_gmValueMode = props.m_gmValueMode;
m_gmSliderMode = props.m_gmSliderMode;
@@ -84,6 +87,20 @@ QSize VCProperties::size() const
return m_size;
}
+/*****************************************************************************
+ * Keyboard scrolling
+ *****************************************************************************/
+
+void VCProperties::setKeyboardScroll(const bool enable)
+{
+ m_keyboardScroll = enable;
+}
+
+bool VCProperties::keyboardScroll() const
+{
+ return m_keyboardScroll;
+}
+
/*****************************************************************************
* Grand Master
*****************************************************************************/
@@ -166,6 +183,15 @@ bool VCProperties::loadXML(QXmlStreamReader &root)
/* Set size if both are valid */
if (sz.isValid() == true)
setSize(sz);
+\
+ bool keyboardScroll = true;
+
+ /* Keyboard scrolling */
+ str = root.attributes().value(KXMLQLCVCPropertiesKeyboardScroll).toString();
+ if (str.isEmpty() == false)
+ keyboardScroll = QVariant(str).toBool();
+ setKeyboardScroll(keyboardScroll);
+
root.skipCurrentElement();
}
else if (root.name() == KXMLQLCVCPropertiesGrandMaster)
@@ -224,6 +250,7 @@ bool VCProperties::saveXML(QXmlStreamWriter *doc) const
doc->writeStartElement(KXMLQLCVCPropertiesSize);
doc->writeAttribute(KXMLQLCVCPropertiesSizeWidth, QString::number(size().width()));
doc->writeAttribute(KXMLQLCVCPropertiesSizeHeight, QString::number(size().height()));
+ doc->writeAttribute(KXMLQLCVCPropertiesKeyboardScroll, QVariant(keyboardScroll()).toString());
doc->writeEndElement();
/***********************
diff --git a/ui/src/virtualconsole/vcproperties.h b/ui/src/virtualconsole/vcproperties.h
index c8eadd6fbc..cd29565acc 100644
--- a/ui/src/virtualconsole/vcproperties.h
+++ b/ui/src/virtualconsole/vcproperties.h
@@ -37,10 +37,11 @@ class Doc;
#define KXMLQLCVirtualConsole QString("VirtualConsole")
-#define KXMLQLCVCProperties QString("Properties")
-#define KXMLQLCVCPropertiesSize QString("Size")
-#define KXMLQLCVCPropertiesSizeWidth QString("Width")
-#define KXMLQLCVCPropertiesSizeHeight QString("Height")
+#define KXMLQLCVCProperties QString("Properties")
+#define KXMLQLCVCPropertiesSize QString("Size")
+#define KXMLQLCVCPropertiesSizeWidth QString("Width")
+#define KXMLQLCVCPropertiesSizeHeight QString("Height")
+#define KXMLQLCVCPropertiesKeyboardScroll QString("KeyboardScroll")
#define KXMLQLCVCPropertiesGrandMaster QString("GrandMaster")
#define KXMLQLCVCPropertiesGrandMasterVisible QString("Visible")
@@ -78,6 +79,19 @@ class VCProperties
private:
QSize m_size;
+ /*********************************************************************
+ * Keyboard scrolling
+ *********************************************************************/
+public:
+ /** Set Virtual Console keyboard scrolling */
+ void setKeyboardScroll(const bool enable);
+
+ /** Get Virtual Console keyboard scrolling */
+ bool keyboardScroll() const;
+
+private:
+ bool m_keyboardScroll;
+
/*************************************************************************
* Grand Master
*************************************************************************/
diff --git a/ui/src/virtualconsole/vcproperties.ui b/ui/src/virtualconsole/vcproperties.ui
index 746132181c..93a672dc5e 100644
--- a/ui/src/virtualconsole/vcproperties.ui
+++ b/ui/src/virtualconsole/vcproperties.ui
@@ -105,6 +105,35 @@
-
+
+
+ Scrolling
+
+
+
-
+
+
+ Use arrow and PgUp/PgDown keys to scroll
+
+
+ true
+
+
+
+ -
+
+
+ Note: enabling keyboard scroll prevents using arrow and PgUp/PgDown keys in Key combinations for console controls.
+
+
+ true
+
+
+
+
+
+
+ -
Qt::Vertical
@@ -820,6 +849,7 @@
m_sizeXSpin
m_sizeYSpin
+ m_enableKeyboardScroll
m_buttonWspin
m_buttonHspin
m_sliderWspin
@@ -994,6 +1024,22 @@
+
+ m_enableKeyboardScroll
+ toggled(bool)
+ VCPropertiesEditor
+ slotKeyboardScrollToggled(bool)
+
+
+ 190
+ 198
+
+
+ 190
+ 245
+
+
+
slotGridXChanged(int)
diff --git a/ui/src/virtualconsole/vcpropertieseditor.cpp b/ui/src/virtualconsole/vcpropertieseditor.cpp
index ef1663d1cd..7349d694cf 100644
--- a/ui/src/virtualconsole/vcpropertieseditor.cpp
+++ b/ui/src/virtualconsole/vcpropertieseditor.cpp
@@ -56,6 +56,7 @@ VCPropertiesEditor::VCPropertiesEditor(QWidget* parent, const VCProperties& prop
/* General page */
m_sizeXSpin->setValue(properties.size().width());
m_sizeYSpin->setValue(properties.size().height());
+ m_enableKeyboardScroll->setChecked(properties.keyboardScroll());
/* Widgets page */
QSettings settings;
@@ -319,6 +320,11 @@ void VCPropertiesEditor::slotSizeYChanged(int value)
m_properties.setSize(sz);
}
+void VCPropertiesEditor::slotKeyboardScrollToggled(bool checked)
+{
+ m_properties.setKeyboardScroll(checked);
+}
+
void VCPropertiesEditor::slotSpeedDialConfirmed()
{
if (m_speedValueEdit->text().contains(".") == false)
diff --git a/ui/src/virtualconsole/vcpropertieseditor.h b/ui/src/virtualconsole/vcpropertieseditor.h
index 48ba480e46..a4f920838c 100644
--- a/ui/src/virtualconsole/vcpropertieseditor.h
+++ b/ui/src/virtualconsole/vcpropertieseditor.h
@@ -84,6 +84,7 @@ class VCPropertiesEditor : public QDialog, public Ui_VCPropertiesEditor
private slots:
void slotSizeXChanged(int value);
void slotSizeYChanged(int value);
+ void slotKeyboardScrollToggled(bool checked);
/*************************************************************************
* Widgets page
diff --git a/ui/src/virtualconsole/vcscrollarea.cpp b/ui/src/virtualconsole/vcscrollarea.cpp
new file mode 100644
index 0000000000..c9306c176d
--- /dev/null
+++ b/ui/src/virtualconsole/vcscrollarea.cpp
@@ -0,0 +1,18 @@
+#include "vcscrollarea.h"
+#include "qevent.h"
+
+VCScrollArea::VCScrollArea(QWidget *parent) : QScrollArea(parent), m_keyPassthru(false) {
+ // nothing more right now
+}
+
+void VCScrollArea::keyPressEvent(QKeyEvent *ev) {
+ if (m_keyPassthru) {
+ ev->ignore();
+ } else {
+ QScrollArea::keyPressEvent(ev);
+ }
+}
+
+void VCScrollArea::setKeyPassthruEnabled(bool enable) {
+ m_keyPassthru = enable;
+}
diff --git a/ui/src/virtualconsole/vcscrollarea.h b/ui/src/virtualconsole/vcscrollarea.h
new file mode 100644
index 0000000000..da2bee9ddb
--- /dev/null
+++ b/ui/src/virtualconsole/vcscrollarea.h
@@ -0,0 +1,23 @@
+#ifndef VCSCROLLAREA_H
+#define VCSCROLLAREA_H
+
+#include
+#include
+#include
+
+class VCScrollArea : public QScrollArea
+{
+ Q_OBJECT
+public:
+ explicit VCScrollArea(QWidget *parent = nullptr);
+
+ void setKeyPassthruEnabled(bool enabled);
+
+protected:
+ void keyPressEvent(QKeyEvent *) override;
+
+private:
+ bool m_keyPassthru;
+};
+
+#endif // VCSCROLLAREA_H
diff --git a/ui/src/virtualconsole/virtualconsole.cpp b/ui/src/virtualconsole/virtualconsole.cpp
index 44aeda860a..fb99a73306 100644
--- a/ui/src/virtualconsole/virtualconsole.cpp
+++ b/ui/src/virtualconsole/virtualconsole.cpp
@@ -133,6 +133,7 @@ VirtualConsole::VirtualConsole(QWidget* parent, Doc* doc)
, m_contents(NULL)
, m_liveEdit(false)
+ , m_keyboardScroll(true)
{
Q_ASSERT(s_instance == NULL);
s_instance = this;
@@ -1583,7 +1584,7 @@ void VirtualConsole::initContents()
{
Q_ASSERT(layout() != NULL);
- m_scrollArea = new QScrollArea(this);
+ m_scrollArea = new VCScrollArea(this);
m_contentsLayout->addWidget(m_scrollArea);
m_scrollArea->setAlignment(Qt::AlignCenter);
m_scrollArea->setWidgetResizable(false);
@@ -1707,6 +1708,9 @@ void VirtualConsole::enableEdit()
m_stackingRaiseAction->setShortcut(QKeySequence("SHIFT+UP"));
m_stackingLowerAction->setShortcut(QKeySequence("SHIFT+DOWN"));
+ // disable key passthru
+ m_scrollArea->setKeyPassthruEnabled(false);
+
// Show toolbar
m_toolbar->show();
}
@@ -1759,6 +1763,10 @@ void VirtualConsole::disableEdit()
m_stackingRaiseAction->setShortcut(QKeySequence());
m_stackingLowerAction->setShortcut(QKeySequence());
+
+ // manage key passthru
+ m_scrollArea->setKeyPassthruEnabled(!m_keyboardScroll);
+
// Hide toolbar; there's nothing usable there in operate mode
m_toolbar->hide();
@@ -1821,6 +1829,7 @@ bool VirtualConsole::loadXML(QXmlStreamReader &root)
QSize size(m_properties.size());
contents()->resize(size);
contents()->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ m_keyboardScroll = m_properties.keyboardScroll();
}
else if (root.name() == KXMLQLCVCFrame)
{
diff --git a/ui/src/virtualconsole/virtualconsole.h b/ui/src/virtualconsole/virtualconsole.h
index 9b3d642626..db63ba1a1f 100644
--- a/ui/src/virtualconsole/virtualconsole.h
+++ b/ui/src/virtualconsole/virtualconsole.h
@@ -26,6 +26,7 @@
#include
#include
+#include "vcscrollarea.h"
#include "vcproperties.h"
#include "doc.h"
@@ -34,7 +35,7 @@ class QXmlStreamWriter;
class VirtualConsole;
class QActionGroup;
class QVBoxLayout;
-class QScrollArea;
+class VCScrollArea;
class VCDockArea;
class QKeyEvent;
class QToolBar;
@@ -336,7 +337,7 @@ public slots:
protected:
QVBoxLayout* m_contentsLayout;
- QScrollArea* m_scrollArea;
+ VCScrollArea* m_scrollArea;
VCFrame* m_contents;
QHash m_widgetsMap;
@@ -363,6 +364,7 @@ public slots:
*********************************************************************/
private:
bool m_liveEdit;
+ bool m_keyboardScroll;
public:
/** Toggle Virtual Console live editting */
diff --git a/ui/test/assignhotkey/assignhotkey_test.cpp b/ui/test/assignhotkey/assignhotkey_test.cpp
index 37bb4b9a52..97551cf4bc 100644
--- a/ui/test/assignhotkey/assignhotkey_test.cpp
+++ b/ui/test/assignhotkey/assignhotkey_test.cpp
@@ -32,8 +32,7 @@ void AssignHotKey_Test::initial()
QKeySequence seq(Qt::Key_A | Qt::SHIFT);
AssignHotKey ahk(NULL, seq);
QCOMPARE(ahk.keySequence(), seq);
- QCOMPARE(ahk.m_previewEdit->text(), seq.toString(QKeySequence::NativeText));
- QCOMPARE(ahk.m_previewEdit->isReadOnly(), true);
+ QCOMPARE(ahk.m_previewLabel->text(), seq.toString(QKeySequence::NativeText));
}
void AssignHotKey_Test::keyPressEventAuto()